home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / prog / dosref23.zip / CHAPTER.005 < prev    next >
Text File  |  1992-03-16  |  151KB  |  2,867 lines

  1.  
  2.        **  Programmer's Technical Reference for MSDOS and the IBM PC **
  3.                 USA copyright TXG 392-616  ALL RIGHTS RESERVED
  4. ───────────────────────────────┤ DOSREF (tm) ├────────────────────────────────
  5.                      ISBN 1-878830-02-3 (disk-based text)
  6.                     Copyright (c) 1987, 1992 Dave Williams
  7.                         ┌─────────────────────────────┐
  8.                         │ Shareware Version, 03/16/92 │
  9.                         │  Please Register Your Copy  │
  10.                         └─────────────────────────────┘
  11.  
  12.  
  13.                             C H A P T E R   F I V E
  14.  
  15.                           Interrupts 22h Through 86h
  16.  
  17. note: the registered version of this chapter is more than twice this size.
  18.  
  19.  
  20.  
  21. ┌─────────────────────────────────────────────────────────────────────────────┐
  22. │Interrupt 22h   Terminate Address ..................................... 5**1 │
  23. └─────────────────────────────────────────────────────────────────────────────┘
  24. (0:0088h)
  25.  This interrupt transfers control to the far (dword) address at this interrupt
  26. location when an application program terminates. The default address for this
  27. interrupt is 0:0088h through 0:008Bh. This address is copied into the program's
  28. Program Segment Prefix at bytes 0Ah through 0Dh at the time the segment is
  29. created and is restored from the PSP when the program terminates. The calling
  30. program is normally COMMAND.COM or an application. Do not issue this interrupt
  31. directly, as the EXEC function call does this for you. If an application
  32. spawns a child process, it must set the Terminate Address prior to issuing the
  33. EXEC function call, otherwise when the second program terminated it would
  34. return to the calling program's Terminate Address rather than its own. This
  35. address may be set with int 21, function 25h.
  36.  
  37.  
  38. ┌─────────────────────────────────────────────────────────────────────────────┐
  39. │Interrupt 23h   Ctrl-Break Exit Address ............................... 5**2 │
  40. └─────────────────────────────────────────────────────────────────────────────┘
  41. (0:008Ch)
  42.  If the user enters a Ctrl-Break during STDIN, STDOUT, STDPRN, or STDAUX, int
  43. 23h is executed. If BREAK is on, int 23h is checked on MOST function calls
  44. (notably 06h). If the user written Ctrl-Break routine saves all registers, it
  45. may end with a return-from-interrupt instruction (IRET) to continue program
  46. execution. If the user-written interrupt program returns with a long return, the
  47. carry flag is used to determine whether the program will be aborted. If the
  48. carry flag is set, the program is aborted, otherwise execution continues (as
  49. with a return by IRET). If the user-written Ctrl-Break interrupt uses function
  50. calls 09h or 0Ah, (Display String or Buffered Keyboard Input) then a three-byte
  51. string of 03h-0Dh-0Ah (ETX/CR/LF) is sent to STDOUT. If execution is continued
  52. with an IRET, I/O continues from the start of the line. When the interrupt
  53. occurs, all registers are set to the value they had when the original function
  54. call to DOS was made.
  55.  
  56.  There are no restrictions on what the Ctrl-Break handler is allowed to do,
  57. including DOS function calls, as long as the registers are unchanged if an IRET
  58. is used.
  59.  
  60.  If the program creates a new segment and loads a second program which itself
  61. changes the Ctrl-Break address, the termination of the second program and
  62. return to the first causes the Ctrl-Break address to be restored from the PSP
  63. to the value it had before execution of the second program.
  64.  
  65. DOS can check for a Ctrl-C at a couple of different places.  In at least
  66. some cases, the value in the AX register on entry to the int 23h handler
  67. is the same as it was on the original entry to int 21h.
  68.  
  69. COMMAND.COM makes use of this fact in its int 23h handler.  When running
  70. a batch file, if you press Ctrl-C it prompts you with the "Terminate batch
  71. job (Y/N)?" question.  If you press Ctrl-C in response to that question,
  72. the int 23h handler notices that it's being called recursively (having
  73. set an internal flag), and uses the value of AX to determine how far it
  74. had gotten on the previous pass.  If you have not responded to the query
  75. yet, it asks it again; otherwise it just terminates the current program.
  76.  
  77. This could cause a problem in a program which was catching int 23h so that
  78. it could release EMS or other resources  on exit, then pass it on to the
  79. original handler.  When called a second time, it would correctly notice
  80. that it had already cleaned up and wouldn't do it again, but by the time it
  81. got to the original handler, AX would be trashed.  The result would be the
  82. standard "Memory allocation error/Cannot load COMMAND, system halted".
  83.  
  84. Apparently, if you want to catch int 23h but also pass it on to the original
  85. handler, you should either save and restore registers, or restore the original
  86. vector on the first trap so you don't get invoked again.
  87.  
  88.  
  89.  
  90. ┌─────────────────────────────────────────────────────────────────────────────┐
  91. │Interrupt 24h   Critical Error Handler ................................ 5**3 │
  92. └─────────────────────────────────────────────────────────────────────────────┘
  93. (0:0090h)
  94.  
  95.  When an unrecoverable I/O error occurs, control is transferred to an error
  96. handler in the resident part of COMMAND.COM with an int 24h. This may be the
  97. standard DOS error handler (Abort, Retry, Ignore, Fail?) or a user-written
  98. routine.
  99.  
  100.  On entry to the error handler, AH will have its bit 7=0 (high order bit)
  101. if the error was a disk error (probably the most common error), bit 7=1 if not.
  102.  
  103.  BP:SI contains the address of a Device Header Control Block from which
  104. additional information can be retrieved (see below). The register is set up
  105. for a retry operation and an error code is in the lower half of the DI register
  106. with the upper half undefined.
  107.  
  108.  DOS places the following items on the user stack. The stack contains the
  109. following from top to bottom:
  110.  
  111.         IP   │   DOS registers from the issuing int 24h
  112.         CS   │
  113.       flags  │
  114.       ───────┼───────────────────────────────────────────────────────
  115.         AX   │   user registers at time of original int 21h request
  116.         BX   │
  117.         CX   │
  118.         SI   │
  119.         DI   │
  120.         BP   │
  121.         DS   │
  122.         ES   │
  123.       ───────┼───────────────────────────────────────────────────────
  124.         IP   │   original int 21h from the user to DOS
  125.         CS   │
  126.       flags  │
  127.  
  128.  To reroute the critical error handler to a user-written critical error handler,
  129. the following should be done:
  130.  
  131. Before an int 24h occurs:
  132. 1) The user application initialization code should save the int 24h vector and
  133.    replace the vector with one pointing to the user error routine.
  134.  
  135. When the int 24h occurs:
  136. 2) When the user error routine received control it should push the flag
  137.    registers onto the stack and execute a far call to the original int 24h
  138.    vector saved in step 1.
  139. 3) DOS gives the appropriate prompt, and waits for user input (Abort, Retry,
  140.    Ignore, Fail). After the user input, DOS returns control to the user error
  141.    routine instruction following the far call.
  142. 4) The user error routine can now do any tasks necessary. To return to the
  143.    original application at the point the error occurred, the error routine needs
  144.    to execute an IRET instruction. Otherwise, the user error routine should
  145.    remove the IP, CS, and flag registers from the stack. Control can then be
  146.    passed to the desired routine.
  147.  
  148.  Int 24h provides the following values in registers on entry to the interrupt
  149. handler:
  150.  
  151. entry   AH      status byte (bits)
  152.                 7       0       disk I/O hard error
  153.                         1       other error - if block device, bad FAT
  154.                                 - if char device, code in DI
  155.                 6       unused
  156.                 5       0       if IGNORE is not allowed
  157.                         1       if IGNORE is allowed
  158.                 4       0       if RETRY  is not allowed
  159.                         1       if RETRY  is allowed
  160.                 3       0       if FAIL   is not allowed
  161.                         1       if FAIL   is allowed
  162.                 2 \     disk area of error  00 = DOS area  01 = FAT
  163.                 1 /                         10 = root dir  11 = data area
  164.                 0       0       if read operation
  165.                         1       if write operation
  166.         AL      drive number if AH bit 7 = 1, otherwise undefined
  167.                 If it is a hard error on disk (AH bit 7=0), register AL
  168.                 contains the failing drive number (0=A:, 1=B:, etc.).
  169.         BP:SI   address of a Device Header Control Block for which error
  170.                 occurred. Block device if high bit of BP:SI+4 = 1
  171.         DI      (low byte) error code (note: high byte is undefined)
  172.                error code                 description
  173.                 00h             attempt to write on write-protected diskette
  174.                 01h             unknown unit
  175.                 02h             drive not ready
  176.                 03h             unknown command
  177.                 04h             data error (bad CRC)
  178.                 05h             bad request structure length
  179.                 06h             seek error
  180.                 07h             unknown media type
  181.                 08h             sector not found
  182.                 09h             printer out of paper
  183.                 0Ah             write fault
  184.                 0Bh             read fault
  185.                 0Ch             general failure
  186.                 0Fh             invalid disk change      (DOS 3.0+)
  187.                 10h             FCB unavailable          (DOS 3.0+)
  188.                 11h             sharing buffer overflow  (DOS 3.0+)
  189.  
  190.         note: Only codes 00h through 0Ch are defined in DR-DOS 3.32.
  191.  
  192. The handler must return this information:
  193.  
  194.  The registers are set such that if an IRET is executed, DOS responds according
  195. to (AL) as follows:
  196. AL      00h     IGNORE the error
  197.         01h     RETRY the operation
  198.         02h     ABORT via int 22h (jump to terminate address)
  199.         03h     FAIL the system call that is in progress (DOS 3.0+)
  200. note 1) Be careful when choosing to ignore a response because this causes DOS
  201.         to think that an operation has completed successfully when it may not
  202.         have.
  203.      2) If the error was a character device, the contents of AL are invalid.
  204.      3) Early PS/2 BIOSes did not perform a retry on disk errors until a disk
  205.         had been read at least once after boot-up.
  206.  
  207.  
  208. Other Errors
  209.  
  210.  If AH bit 7=1, the error occurred on a character device, or was the result of
  211. a bad memory image of the FAT. The device header passed in BP:SI can be examined
  212. to determine which case exists. If the attribute byte high-order bit indicates
  213. a block device, then the error was a bad FAT. Otherwise, the error is on a
  214. character device.
  215.  
  216.  If a character device is involved, the contents of AL are unpredictable, and
  217. the error code is in DI as above.
  218.  
  219. note 1) Before giving this routine control for disk errors, DOS performs several
  220.         retries. The number of retries varies according to the DOS version.
  221.      2) For disk errors, this exit is taken only for errors occurring during an
  222.         int 21h function call. It is not used for errors during an int 25h or
  223.         26h.
  224.      3) This routine is entered in a disabled state.
  225.      4) All registers must be preserved.
  226.      5) This interrupt handler should refrain from using DOS function calls. If
  227.         necessary, it may use calls 01h through 12h. Use of any other call
  228.         destroys the DOS stack and leaves DOS in an unpredictable state.
  229.      6) The interrupt handler must not change the contents of the device header.
  230.      7) If the interrupt handler handles errors itself rather than returning to
  231.         DOS, it should restore the application program's registers from the
  232.         stack, remove all but the last three words on the stack, then issue an
  233.         IRET. This will return to the program immediately after the int 21h
  234.         that experienced the error. Note that if this is done DOS will be in an
  235.         unstable state until a function call higher than 12h is issued,
  236.         therefore not recommended.
  237.      8) For DOS 3.x+, IGNORE requests (AL=0) are converted to FAIL for critical
  238.         errors that occur on FAT or DIR sectors.
  239.      9) For DOS 3.10 up, IGNORE requests (AL=0) are converted to FAIL requests
  240.         for network critical errors (50-79).
  241.     10) The device header pointed to by BP:SI is as follows:
  242.        dword    pointer to next device (0FFFFh if last device)
  243.         word    attributes:
  244.                 bit     15      1       if character device.
  245.                                         If bit 15 is 1:
  246.                                         bit 0 = 1 if current standard input
  247.                                         bit 1 = 1 if current standard output
  248.                                         bit 2 = 1 if current NULL device
  249.                                         bit 3 = 1 if current CLOCK device
  250.                                 0       if block device.
  251.                 bit     14      is the IOCTL bit
  252.         word    pointer to device driver strategy entry point
  253.         word    pointer to device driver interrupt entry point
  254.       8 bytes   character device named field for block devices. The first byte
  255.                 is the number of units.
  256.     11) To tell if the error occurred on a block or character device, look at
  257.         bit 15 in the attribute field (WORD at BP:SI+4).
  258.     12) If the name of the character device is desired, look at the eight bytes
  259.         starting at BP:SI+10.
  260.  
  261.  
  262. Handling of Invalid Responses (DOS 3.0+)
  263.  
  264.      A) If IGNORE (AL=0) is specified by the user and IGNORE is not allowed
  265.         (bit 5=0), make the response FAIL (AL=3).
  266.      B) If RETRY (AL=1) is specified by the user and RETRY is not allowed
  267.         (bit 4=0), make the response FAIL (AL=3).
  268.      C) If FAIL (AL=3) is specified by the user and FAIL is not allowed
  269.         (bit 3=0), make the response ABORT. (AL=2)
  270.  
  271.  
  272.  
  273.  
  274. ┌─────────────────────────────────────────────────────────────────────────────┐
  275. │Interrupt 25h   Absolute Disk Read .................................... 5**4 │
  276. │Interrupt 26h   Absolute Disk Write ................................... 5**5 │
  277. └─────────────────────────────────────────────────────────────────────────────┘
  278. (0:0094h, 0:0098h)
  279.  
  280.   These transfer control directly to the disk device driver. On return, the
  281. original flags are still on the stack (put there by the INT instruction). This
  282. is necessary because return information is passed back in the current flags.
  283. All registers except the segment registers are destroyed by these calls.
  284.  
  285.   These interrupts should be avoided for software that is intended to run on
  286. a network, as they may cause troubles in network environments.
  287.  
  288.   PC-MOS/386 provides these services only for compatibility with existing
  289. DOS-mode apps.  25h/26h are not available for native mode 386-mode DOS apps.
  290.  
  291.   The number of sectors specified is transferred between the given drive and the
  292. transfer address. Logical sector numbers are obtained by numbering each sector
  293. sequentially starting from track 0, head 0, sector 1 (logical sector 0) and
  294. continuing along the same head, then to the next head until the last sector on
  295. the last head of the track is counted.  Thus, logical sector 1 is track 0, head
  296. 0, sector 2; logical sector 2 is track 0, head 0, sector 3; and so on. Numbering
  297. then continues wih sector 1 on head 0 of the next track. Note that although the
  298. sectors are sequentially numbered (for example, sectors 2 and 3 on track 0 in
  299. the example above), they may not be physically adjacent on disk, due to
  300. interleaving. Note that the mapping is different from that used by DOS 1.10 for
  301. double-sided diskettes.
  302.  
  303.  The request is as follows:
  304.  
  305. int 25h for Absolute Disk Read,            | except Compaq DOS 3.31 or DOS 4.0+
  306. int 26h for Absolute Disk Write            | over-32Mb partitions
  307. entry   AL      drive number (0=A:, 1=B:, etc)
  308.         CX      number of sectors to read (int 25h) or write (int 26h)
  309.         DS:BX   segment/offset of disk transfer address buffer (DTA)
  310.         DX      first relative sector to read - beginning logical sector number
  311. return  CF      set if error
  312.         AL      error code issued to int 24h in low half of DI
  313.         AH      01h     bad command
  314.                 02h     bad address mark
  315.                 03h     write-protected disk
  316.                 04h     requested sector not found
  317.                 08h     DMA failure
  318.                 10h     data error (bad CRC)
  319.                 20h     controller failed
  320.                 40h     seek operation failed
  321.                 80h     attachment failed to respond
  322. note 1) DOS returns with a far ret which leave the original flags on the stack.
  323.         Be sure to pop the stack to prevent uncontrolled growth.
  324.      2) MSC 3.0's int86() was a straight interrupt call.  MSC 4.0 and later
  325.         make special provision for adjusting the stack on int 25h and 26h.
  326.         This probably won't hurt anything but you should be aware of it.
  327.      3) Ints 25h and 26h will try rereading a disk if they get an error the
  328.         first time.
  329.  
  330.  To address partition sizes greater than 32Mb an extended format is provided
  331. in Compaq DOS 3.31, DOS 4.0, and DR-DOS. This format passes a 32-bit address
  332. value by means of a parameter block. The extended format may be used to
  333. address disks smaller than 32Mb as well as larger.
  334.  
  335.  The request is as follows:
  336.  
  337. int 25h for Absolute Disk Read,            | Compaq DOS 3.31 or DOS 4.0+
  338. int 26h for Absolute Disk Write            | over-32Mb partitions
  339. entry   AL      drive number (0=A:, 1=B:, etc)
  340.         CX      0FFFFh
  341.         DS:BX   address of parameter block. Block format:
  342.               4 bytes    sector number
  343.               2 bytes    number of sectors to read
  344.               4 bytes    FAR pointer to buffer
  345. return  CF      set if error
  346.         AL      error code issued to int 24h in low half of DI
  347.         AH      01h     bad command
  348.                 02h     bad address mark
  349.                 03h     write-protected disk
  350.                 04h     requested sector not found
  351.                 08h     DMA failure
  352.                 10h     data error (bad CRC)
  353.                 20h     controller failed
  354.                 40h     seek operation failed
  355.                 80h     attachment failed to respond
  356. note 1) DOS returns with a far ret which leave the original flags on the stack.
  357.         Be sure to pop the stack to prevent uncontrolled growth.
  358.      2) MSC 3.0's int86() was a straight interrupt call.  MSC 4.0 and later
  359.         make special provision for adjusting the stack on int 25h and 26h.
  360.         This probably won't hurt anything but you should be aware of it.
  361.      3) Ints 25h and 26h will try rereading a disk if they get an error the
  362.         first time.
  363.      4) Partition is potentially >32M (and requires this form of the call) if
  364.         bit 1 of device attribute word in device driver is set.
  365.      5) In the IBM OS/2 Tech Ref Volume 1, page 7-33, under "DOS Environment
  366.         Software Interrupt Support", it lists:
  367.         25h  direct read       supported
  368.         26h  direct write      an error is returned on requests for
  369.                                non-removable media
  370.  
  371.   Interrupts 25h and 26h can read logical sectors only.  They cannot read
  372. hidden sectors.
  373.  
  374.   Critical errors are not processed by ints 25h and 26h.  Should one happen,
  375. the  interrupt routine will return an error value to the program but will not 
  376. itself call the critical error handler at int 24h.
  377.   
  378.  The Microsoft DOS 5.0 Technical Reference refers to this call as "superceded" 
  379. and directs you to int 21h, fn 440Dh, minor code 61h, "Read Track on Logical 
  380. Drive" and minor code 41h, "Write Track on Logical Drive."  See Chapter 4.
  381.  
  382.  
  383. ┌─────────────────────────────────────────────────────────────────────────────┐
  384. │Interrupt 27h   Terminate And Stay Resident ........................... 5**6 │
  385. └─────────────────────────────────────────────────────────────────────────────┘
  386. (0:009Ch)       (obsolete)
  387.  This vector is used by programs that are to remain resident when COMMAND.COM
  388. regains control.
  389.  
  390.  After initializing itself, the program must set DX to its last address plus
  391. one relative to the program's initial DS or ES value (the offset at which other
  392. programs can be loaded), then execute interrupt 27h. DOS then considers the
  393. program as an extension of itself, so the program is not overlaid when other
  394. programs are executed. This is useful for loading programs such as utilities
  395. and interrupt handlers that must remain resident.
  396.  
  397. entry   CS      current program segment
  398.         DX      last program byte + 1
  399. return  none
  400. note 1) This interrupt must not be used by .EXE programs that are loaded into
  401.         the high end of memory.
  402.      2) This interrupt restores the interrupt 22h, 23h, and 24h vectors in the
  403.         same manner as interrupt 20h. Therefore, it cannot be used to install
  404.         permanently resident Ctrl-Break or critical error handler routines.
  405.      3) The maximum size of memory that can be made resident by this method is
  406.         64K.
  407.      4) Memory can be more efficiently used if the block containing a copy of
  408.         the environment is deallocated before terminating. This can be done by
  409.         loading ES with the segment contained in 2Ch of the PSP, and issuing
  410.         function call 49h (Free Allocated Memory).
  411.      5) DOS function call 4Ch allows a program to pass a completion code to DOS,
  412.         which can be interpreted with processing (see function call 31h).
  413.      6) If int 27h is called by a program linked with the /HIGH switch, it
  414.         will occupy the top of memory and prevent COMMAND.COM from reloading,
  415.         which is probably not what you want.
  416.      7) Int 21, function 31h is the preferred method to cause a program to
  417.         remain resident because this allows return information to be passed and
  418.         allows a program larger than 64K to remain resident.
  419.      8) It is possible to make an EXE program resident with this call by
  420.         putting a 27h in the second byte of the PSP and terminating with a
  421.         RET FAR.
  422.      9) Programs terminating with int 27h do not close files on exit. Your
  423.         program must explicitly close any opened files before going resident.
  424.     10) Int 27h does not work correctly when DX contains values from 0FFF1h to
  425.         0FFFFh. In this case, DOS discards the high bit of the contents of DX,
  426.         resulting in 32k less resident memory than was requested by the
  427.         program.
  428.     11) This interrupt will work with PC-MOS/386, but there are a number of
  429.         MOS-specific advantages to using int 21h/31h instead.  See Chapter
  430.         4 for further explanation.
  431.  
  432.  
  433. ┌─────────────────────────────────────────────────────────────────────────────┐
  434. │Interrupt 28h   (not documented by Microsoft) ......................... 5**7 │
  435. └─────────────────────────────────────────────────────────────────────────────┘
  436.            *    DOS Idle Interrupt
  437.  
  438.  Int 28h has been provided by DOS since release 2.0. The int 28h process is
  439. similar to the "Timer Tick" process provided by BIOS via int 1Ch in that it is
  440. an "outbound" (from DOS) call which an application can "hook onto" to get
  441. service at a particular entry point. DOS normally only issues int 28h when it
  442. recieves a function call (int 21h) from a foreground application with an
  443. argument in the range of 0 thru 12 (0Ch) in the AH register, or when it is
  444. idling waiting for keyboard input. In effect, when DOS issues int 28h, it is
  445. saying to the background task "I'm not doing anything hot right now, if you can
  446. use the time, go ahead." This means that a foreground application which doesn't
  447. do many low-number DOS functions can preempt CPU time easily.
  448.  
  449.  When int 28h is being issued it is usually safe to do DOS calls. You won't get
  450. int 28hs if a program is running that doesn't do its keyboard input through
  451. DOS. You should rely on the timer interrupt for these. It is used primarily by
  452. the PRINT.COM routines, but any number of other routines can be chained to it
  453. by saving the original vector and calling it with a FAR call (or just JMPing to
  454. it) at the end of the new routine.
  455.  
  456.  Int 28h is not called at all when any non-trivial foreground task is running.
  457. As soon as a foreground program has a file open, int 28h no longer gets called.
  458. Could make a good driver for for a background program that works as long as
  459. there is nothing else going on in the machine.
  460.  
  461.  DOS uses 3 separate internal stacks: one for calls 01h through 0Ch; another
  462. for calls 0Dh and above; and a third for calls 01h through 0Ch when a Critical
  463. Error is in progress. When int 28h is called, any calls above 0Ch can be
  464. executed without destroying the internal stack used by DOS at the time.
  465.  
  466.  The byte which is pushed on the stack before an int 28h just indicates which
  467. stack area is being used by the current int 21h call. In DOS 3.1, the code
  468. sequence that calls int 28h looks like this:
  469.  
  470.         PUSH    SS:[0304]
  471.         INT     28
  472.         POP     SS:[0304]
  473.  
  474.  The low-order byte of the word pushed contains 1 if the int 21h call currently
  475. in progress is for services 1 through 0Ch, and 0 for service 0 and for 0Dh and
  476. up. Assuming that the last DOS call was not a reentrant one, this tells you
  477. which set of DOS services should be safe to call.
  478.  
  479. entry   no parameters available
  480. return  none
  481. note 1) The int 28h handler may invoke any int 21h function except functions
  482.         00h through 0Ch (and 50h/51h under DOS 2.x unless DOS CritErr flag is
  483.         set).
  484.      2) Apparently int 28h is also called during screen writes.
  485.      3) Until some program installs its own routine, this interrupt vector
  486.         simply points to an IRET opcode.
  487.      4) Supported in OS/2 1.0's DOS Compatibility Box.
  488.      5) It is possible, if you are careful, to enhance the background priority
  489.         by providing more int 28h calls than DOS normally would issue.
  490.      6) If the InDOS flag is zero on int 28h, then it was called by someone
  491.         other than DOS, and the word on the stack should NOT be examined.
  492.      7) From Quarterdeck Tech Support: "Turbo Pascal 4.0 uses int 28h as a
  493.         convenience for its SideKick product users. Interrupt 28 is the DOS
  494.         busy flag which DESQview treats as a pause and gives up time...
  495.         foreground gets little time and background gets a lot...reverse of
  496.         normal."
  497.      8) This interrupt is supported by PC-MOS/386 and MS Windows 3.0+.
  498.  
  499.  
  500. ┌─────────────────────────────────────────────────────────────────────────────┐
  501. │Interrupt 29h   (not documented by Microsoft) ......................... 5**8 │
  502. └─────────────────────────────────────────────────────────────────────────────┘
  503.            *    Internal - Quick Screen Output
  504.  
  505.  This method is extremely fast (much faster than DOS 21h subfunctions 2 and 9,
  506. for example), and it is portable, even to "non-compatible" MS-DOS computers.
  507.  
  508. entry   AL      ASCII value for character to output to screen
  509. return  unknown
  510. note 1) Documented by Digital Equipment's DOS Reference as provided with the
  511.         DEC Rainbow. Also documented by Digital Research in the DR-DOS manual.
  512.      2) If ANSI.SYS is installed, character output is filtered through it.
  513.      3) Works on the IBM PC and compatibles, Wang PC, HP-150 and Vectra, DEC
  514.         Rainbow, NEC APC, Texas Instruments PC and others.
  515.      4) This interrupt is called from the DOS's output routines if output is
  516.         going to a device rather than a file, and the device driver's attribute
  517.         word has bit 3 (04h) set to "1".
  518.      5) This call has been tested with MSDOS 2.11, PCDOS 2.1, PCDOS 3.1, PCDOS
  519.         3.2, PCDOS 3.3, PCDOS 4.01, and Compaq DOS 3.31.
  520.      6) Used in IBMBIO.COM as a vector to int 10, function 0Eh (write TTY)
  521.         followed by an IRET.
  522.      7) Most of the fast ANSI device drivers use this interrupt - ZANSI.SYS,
  523.         NANSI.SYS, and PCMag's ANSI.COM, Quarterdeck's DVANSI.SYS.
  524.      8) When using int 29h to output characters the ASCII 7 (BELL) will
  525.         suppress character output while the bell is sounding.
  526.      9) When device drivers (or the SYSINIT module which loads the drivers)
  527.         need to do console output, they use int 29h, to call the console device
  528.         driver directly. For example, messages telling you about errors in your
  529.         CONFIG.SYS file are printed using this service.
  530.  
  531.  
  532.  
  533. ┌─────────────────────────────────────────────────────────────────────────────┐
  534. │Interrupt 2Ah   Microsoft Networks - Session Layer Interrupt .......... 5**9 │
  535. └─────────────────────────────────────────────────────────────────────────────┘
  536.         1)  This interrupt was not officially documented by Microsoft
  537.             until the release of Windows 3.0, which has setup parameters
  538.             for int 2Ah.
  539.         2)  LANtastic NetBIOS interface, original IBM PC LAN interface.
  540.         3)  NetBIOS alternate interface. The alternate interface (2Ah) was
  541.             originally designed as a "higher" level interface to network
  542.             communications rather than the "low" level interface (5Ch)
  543.             provided by the NETBIOS. The 2Ah interface, however, does not
  544.             support any higher level functions than does the 5Ch interface
  545.             and therefore has not become a de facto standard as has the 5Ch
  546.             interface.
  547.         4)  Most DOS 4.0 external programs (SHARE, etc) check this
  548.             interrupt during installation.
  549.  
  550. entry   AH      00h     Check for Int 2Ah Network BIOS Installation
  551.                         return  AH      nonzero if installed
  552.                 01h     Execute NETBIOS Request (no error retry)
  553.                         ES:BX   pointer to NCB
  554. return          AL      NETBIOS error code
  555.                 AH      00h     if no error
  556.                         01h     if error
  557.                 02h     Set Net Printer Mode
  558.                 03h     Get Shared-Device Direct I/O Status
  559.                         AL      00h
  560.                         DS:SI   pointer to ASCIIZ disk device name
  561.                         return  CF      clear   if allowed
  562.                                         set     if denied
  563.                         note 1) Direct I/O is through ints 13h, 25h, or 26h.
  564.                              2) If the device is redirected (see int 21h/5F02h)
  565.                                 or this call returns with carry set, the program
  566.                                 should not perform direct disk I/O.
  567.                              3) The device pointed to by DS:SI must include the
  568.                                 colon in the drive:pathname.
  569.                              4) It may take some time for this call to return
  570.                                 to the calling program. Do not use in time-
  571.                                 sensitive applications.
  572.                 04h     Execute NETBIOS
  573.                         AL      00h     retry on error
  574.                                 01h     no retry on error
  575.                         ES:BX   pointer to network control block
  576.                         return  AX      0000h   for no error
  577.                                 AH      01h     if error
  578.                                         AL      error code (unknown)
  579.                         note 1) IBM PC LAN says, "for adapter independence,
  580.                                 use int 2Ah. No not use 5Ch function provided
  581.                                 by the network adapter."
  582.                              2) Error codes that are automatically retried are:
  583.                                 09h     no session resources available
  584.                                 12h     session open rejected
  585.                                 21h     interface busy
  586.                 05h     Get Network Resource Information
  587.                         AL      00h
  588.                         return  AX      reserved
  589.                                 BX      # of network names (16 - names in use)
  590.                                 CX      number of available NCB commands
  591.                                 DX      number of sessions (max - pending)
  592.                 06h     Network Print-Stream Control
  593.                 (IBM PC LAN)
  594.                         AL      01h     Set spooled output to concatenation mode
  595.                                 02h     Set spooled output to truncation mode
  596.                                 03h     Trunate printer stream
  597.                         return  CF      clear   no error
  598.                                         set     AX      DOS error code
  599.                 (LANtastic)
  600.                         AL      01h     Set spooled output to combined mode
  601.                                 return  none
  602.                                 02h     Set spooled output in separate mode
  603.                                 return  none
  604.                                 note    Printer output is not combined when
  605.                                         multiple programs are run or when the
  606.                                         printer is opened or closed. This cmd.
  607.                                         implicitly starts a new print job.
  608.                                 03h     Flush printer output
  609.                                 return  none
  610.                                 note 1) Printer output is flushed and a new
  611.                                         print job is started. If no output
  612.                                         exists to be flushed then this function
  613.                                         has no affect.
  614.                                      2) 03h is equivalent to Ctrl/Alt/keypad-*
  615.                         note    NETBIOS 1.10
  616.                 07h-19h unknown
  617.                 20h     unknown
  618.                         note    AL=01h intercepted by DESQview 2.0.
  619.                 23h     Receive Broadcast Datagram
  620.                         IBM PC LAN 1.2. Manual says "use is not allowed".
  621.                 80h     Begin DOS Critical Section
  622.                         AL      critical section number (1 to 6)
  623.                 note    SHARE.EXE uses critical section number 01h.
  624.                 81h     End DOS Critical Section
  625.                         AL      critical section number (1 to 6)
  626.                 note    SHARE.EXE uses critical section number 01h.
  627.                 82h     Server Hook
  628.                         stack   AX from call to int 21h
  629.                         return  stack unchanged
  630.                         note    Called by the int 21h function dispatcher
  631.                                 in DOS 3.10+ for function 0 and functions
  632.                                 greater than 0Ch except 59h.
  633.                 84h     Keyboard Busy Loop
  634.                         note    Same functionality as DOS's int 28h?
  635.                 87h     Used by DOS PRINT to mark Critical Regions:
  636.                         AL      00h     Begin Critical Region
  637.                                 01h     End Critical Region
  638.                         return  CF      set     region already active
  639.                0A3h     Receive Broadcast Datagram
  640.                         IBM PC LAN 1.2. Manual says "use is not allowed".
  641.  
  642.  
  643. ┌─────────────────────────────────────────────────────────────────────────────┐
  644. │Interrupt 2Bh   (not documented by Microsoft) ......................... 5**10│
  645. └─────────────────────────────────────────────────────────────────────────────┘
  646.            *    Unknown - Internal Routine for DOS (IRET)
  647.  
  648.  
  649. ┌─────────────────────────────────────────────────────────────────────────────┐
  650. │Interrupt 2Ch   (not documented by Microsoft) ......................... 5**11│
  651. └─────────────────────────────────────────────────────────────────────────────┘
  652.            *    Unknown - Internal Routine for DOS (IRET)
  653.  
  654.  
  655. ┌─────────────────────────────────────────────────────────────────────────────┐
  656. │Interrupt 2Dh   (not documented by Microsoft) ......................... 5**12│
  657. └─────────────────────────────────────────────────────────────────────────────┘
  658.            *    Unknown - Internal Routine for DOS (IRET)
  659.  
  660.  
  661. ┌─────────────────────────────────────────────────────────────────────────────┐
  662. │Interrupt 2Eh   (undocumented by Microsoft)  (DOS 2.0+) ............... 5**13│
  663. └─────────────────────────────────────────────────────────────────────────────┘
  664.            *    Internal Routine for DOS  (Alternate EXEC)
  665.  
  666.   This interrupt passes a command line addressed by DS:SI to COMMAND.COM. The
  667. command line must be formatted just like the unformatted parameter area of a
  668. Program Segment Prefix. That is, the first byte must be a count of characters,
  669. and the second and subsequent bytes must be a command line with parameters,
  670. terminated by a carriage return character.
  671.  
  672.   When executed, int 2Eh will reload the transient part of the command
  673. interpreter if it is not currently in memory. If called from a program that
  674. was called from a batch file, it will abort the batch file. If executed from a
  675. program which has been spawned by the EXEC function, it will abort the whole
  676. chain and probably lock up the computer. Int 2Eh also destroys all registers
  677. including the stack pointer.
  678.  
  679.   Int 2Eh is called from the transient portion of the program to reset the DOS
  680. PSP pointers using the above Functions #81 & #80, and then reenters the
  681. resident program.
  682.  
  683.   When called with a valid command line, the command will be carried out by
  684. COMMAND.COM just as though you had typed it in at the DOS prompt. Note that the
  685. count does not include the carriage return. This is an elegant way to perform a
  686. SET from an application program against the master environment block for
  687. example.
  688.  
  689. entry   DS:SI   pointer to an ASCIIZ command line in the form:
  690.                         count byte
  691.                         ASCII string
  692.                         carriage return
  693.                         null byte
  694. note 1) Destroys all registers including stack pointer.
  695.      2) Seems to work OK in both DOS 2.x and 3.x.
  696.      3) It is reportedly not used by DOS.
  697.      4) As far as known, int 2Eh is not used by DOS 3.1, although it was called
  698.         by COMMAND.COM of PCDOS 3.0, so it appears to be in 3.1 only for the
  699.         sake of compatibility.
  700.      5) Not used by the aftermarket 4DOS command interpreter prior to version
  701.         3.0. 3.0 merely hooks this vector and does nothing with it.  3.02 and
  702.         later provide a TSR to add 2Eh capability.
  703.      6) Trapped by PC-MOS/386 to prevent illegal entry into the command
  704.         processor.
  705.  
  706.  
  707.  
  708. ┌─────────────────────────────────────────────────────────────────────────────┐
  709. │Interrupt 2Fh   Multiplex Interrupt ................................... 5**14│
  710. └─────────────────────────────────────────────────────────────────────────────┘
  711.  
  712.  Interrupt 2Fh is the multiplex interrupt. A general interface is defined
  713. between two processes. It is up to the specific application using interrupt
  714. 2Fh to define specific functions and parameters.
  715.  
  716.  This interrupt is becoming more commonly used as the available interrupt 21
  717. functions are getting to be in short supply. Int 2Fh doesn't require any
  718. support from DOS itself for it to be used in application programs. It's not
  719. handled by DOS, but by the programs themselves.
  720.  
  721.  Every multiplex interrupt handler is assigned a specific multiplex number.
  722. The multiplex number is specified in the AH register; the AH value tells which
  723. program your request is directed toward. The specific function that the handler
  724. is to perform is placed in the AL register. Other parameters are places in the
  725. other registers as needed. The handlers are chained into the 2Fh interrupt
  726. vector and the multiplex number is checked to see if any other application is
  727. using the same multiplex number. There is no predefined method for assigning a
  728. multiplex number to a handler. You must just pick one. To avoid a conflict if
  729. two applications choose the same multiplex number, the multiplex numbers used by
  730. an application should be patchable. In order to check for a previous
  731. installation of the current application, you can search memory for a unique
  732. string included in your program. If the value you wanted in AH is taken but
  733. you don't find the string, then another application has grabbed that location.
  734.  
  735.  Int 2Fh was not documented under DOS 2.x. There is no reason not to use int 2Fh
  736. as the multiplex interrupt in DOS 2.x. The only problem is that DOS 2.x does not
  737. initialize the int 2Fh vector, so when you try to chain to it like you are
  738. supposed to, it will crash. If your program checks the vector for being zero
  739. and initializes it itself or doesn't chain in that case, it will work for you
  740. n 2.x just the same as 3.x.
  741.  
  742.  DOS 3.2 itself contains some int 2Fh handlers - it uses values of 08h, 13h,
  743. and 0F8h. There may be more. NLSFUNC from DOS 3.3 up uses part of int 2Fh and
  744. so does GRAFTABL.
  745.  
  746.  For int 2Fh calls, register AH identifies which program is to handle the
  747. interrupt. AH values 00h-7Fh are reserved for DOS, not that anyone cares much.
  748. Values 0C0h-0FFh are reserved for applications. Register AL contains the
  749. subfunction code if used.
  750.  
  751.  IBM has reported that PC-DOS 4.0 will sometimes hang when substituting int
  752. 2Fh for int 67h for network calls. Most of DOS 4.0's external commands check
  753. the 2Fh PRINT and other statuses while operating for enhanced network support.
  754. DOS 4.0 SHARE.EXE traps the 2Fh interrupt. IBM and Microsoft DOS programming
  755. information for versions prior to 4.0 strongly imply that 2Fh functions not
  756. used by PRINT.COM are open for general use. DOS 4.0 uses quite a few 2Fh
  757. functions and this may be a cause of incompatibility with some software.
  758.  
  759.  LANtastic NOS SERVER.EXE v2.49s and earlier will not run under DOS 4.x due
  760. to int 2Fh conflicts. This conflict also occurs under DR-DOS versions 3.40 and
  761. 3.41. DR-DOS is internally similar to DOS 4.0.
  762.  
  763.  
  764. Function   01h  PRINT.COM
  765.            PC-DOS 3.3's PRINT.COM hooks the following interrupt vectors:
  766.                 05h     PrintScreen Interrupt
  767.                 13h     BIOS Disk Interrupt
  768.                 14h     BIOS Serial Communications Interrupt
  769.                 15h     BIOS "System Services" Interrupt
  770.                 17h     BIOS Printer Interrupt
  771.                 19h     Bootstrap Loader Interrupt
  772.                 1Ch     Timer Tick
  773.                 23h     Control-C Terminate Address
  774.                 24h     Critical Error Handler Address
  775.                 28h     DOS Idle Interrupt (undocumented)
  776.                 2Fh     Multiplex Interrupt
  777.  
  778. entry   AH      01h
  779.                 AL      00h     PRINT  Get Installed State
  780.                         This call must be defined by all int 2Fh handlers. It
  781.                         is used by the caller of the handler to determine if
  782.                         the handler is present. On entry, AL=0. On return, AL
  783.                         contains the installed state as follows:
  784.                 return  AL      0FFh    installed
  785.                                 01h     not installed, not OK to install
  786.                                 00h     not installed, OK to install
  787.  
  788.                         01h     PRINT  Submit File
  789.                         DS:DX   pointer to submit packet
  790.                                 format  byte    level
  791.                                         dword   pointer to ASCIIZ filename
  792.                 return  CF      set if error
  793.                                 AX      error code
  794.                 note 1) A submit packet contains the level (BYTE) and a pointer
  795.                         to the ASCIIZ string (DWORD in offset:segment form).
  796.                         The ASCIIZ string must contain the drive, path, and
  797.                         filename of the file you want to print. The filename
  798.                         cannot contain global filename characters.
  799.                 return  CF      set if error
  800.                                 AX      error code
  801.  
  802.                         02h     PRINT Cancel File
  803.                         On entry, AL=2 and DS:DX points to the ASCIIZ string for
  804.                         the print file you want to cancel. Global filename
  805.                         characters are allowed in the filename.
  806.                 DS:DX   pointer to ASCIIZ file name to cancel (wildcards OK)
  807.                 return  CF      set if error
  808.                                 AX      error code
  809.  
  810.                         03h     PRINT Remove All Files
  811.                 return  CF      set if error
  812.                                 AX      error code
  813.  
  814.                         04h     PRINT Hold Queue/Get Status
  815.                         This call holds the jobs in the print queue so that you
  816.                         can scan the queue. Issuing any other code releases the
  817.                         jobs. On entry, AL=4. On return, DX contains the error
  818.                         count. DS:SI points to the print queue. The print queue
  819.                         consists of a series of filename entries. Each entry is
  820.                         64 bytes long. The first entry in the queue is the file
  821.                         currently being printed. The end of the queue is marked
  822.                         by the entry having a null as the first character.
  823.                return   DX      error count
  824.                         DS:SI   pointer to print queue (null-string terminated
  825.                                 list of 64-byte ASCIIZ filenames)
  826.                         CF      set if error
  827.                                 AX      error code
  828.                                         01h     function invalid
  829.                                         02h     file not found
  830.                                         03h     path not found
  831.                                         04h     too many open files
  832.                                         05h     access denied
  833.                                         08h     queue full
  834.                                         09h     spooler busy
  835.                                         0Ch     name too long
  836.                                         0Fh     drive invalid
  837.  
  838.                         05h     PRINT release print jobs
  839.                 return  none
  840.                 note 1) This call has no parameters.
  841.                      2) Restarts the print queue.  This call must be called
  842.                         to restart the current print job or after calling
  843.                         function 04h to pause the print job.
  844.  
  845.                         06h     PRINT get printer device (DOS 3.3+)
  846.                 return  CF      clear   OK
  847.                                 AX      0000h
  848.                         CF      set
  849.                                 AX      0008h   (ERROR_QUEUE_FULL)
  850.                                 DS:SI   pointer to printer device header 
  851.                                         struc.
  852.                 note 1) This call has no parameters.
  853.                      2) 
  854.  
  855.  
  856.  
  857. Function  05h   DOS 3.0+ Critical Error Handler
  858. entry   AH      05h
  859.         AL      00h     Installation Check
  860.                 return  AL      00h     not installed, OK to install
  861.                                 01h     not installed, not OK to install
  862.                                 0FFh    installed
  863.                 note    This set of functions allows a user program to
  864.                         partially or completely override the default
  865.                         critical error handler in COMMAND.COM.
  866.         AL      xxh     Handle Error - nonzero error code in AL
  867.                         (xxh indicates nonzero extended error code)
  868.                 return  CF      clear
  869.                         ES:DI   pointer to ASCIIZ error message
  870.                         AL      (?)
  871.                         CF      set     use default error handler
  872. for LANtastic LANOS:
  873. entry   AH      05h
  874.         AL      00h     for installation check
  875.                 #       for error code (in pre DOS 4.00)
  876.                 1 or 2  for error code in DOS 4.00
  877.         BX      in      Error code
  878. return  CF      clear   if error code converted to text
  879.                 set     if error code can't be converted
  880.         ES:DI   pointer to ASCIIZ text buffer containing error text. This is a
  881.                 read-only text buffer and you must not alter the text in this
  882.                 buffer.
  883.  
  884.  
  885. Function  06h   ASSIGN
  886. entry   AH      06h
  887.         AL      00h     Installation Check
  888.                 01h     Get Memory Segment
  889. return (AH=00h) AL      (to 4.01) nonzero if ASSIGN is installed
  890.                         (5.0)      0FFh if ASSIGN is installed
  891.        (AH=01h) ES      segment of ASSIGN work area
  892. note 1) Many references report the return value in AH, but this call appears
  893.         to return its information in AL.
  894.      2) Microsoft Press' "Advanced MSDOS Programming" (Second Edition)
  895.         documents int 2Fh, AX=2000 to check for ASSIGN, but according to
  896.         Ray Duncan (the author) this is a typo.
  897.  
  898.  
  899. Function   08h  DRIVER.SYS
  900. entry   AH      08h
  901.         AL      00h     Installation Check
  902.                 return  AL      00h     not installed, OK to install
  903.                                 01h     not installed, not OK to install
  904.                                 0FFh    installed
  905.                 01h     Add New Block Device
  906.                         DS:DI   pointer to device driver header
  907.                 note    Moves down list of drivers, copying and modifying word
  908.                         at offset 29h. Device driver appended to driver chain.
  909.                 02h     Execute Device Driver Request
  910.                         ES:BX   pointer to device driver request header
  911.                 return  Request header updated as per requested operation.
  912.  
  913.  
  914. Function   10h  SHARE                                   (DOS 3.0+)
  915. entry   AH      10h
  916.         AL      00h     Installation Check
  917. return  AL      00h     not installed, OK to install
  918.                 01h     not installed, not OK to install
  919.                 0FFh    installed
  920. note 1) Values of AL other than 00h appear to put DOS 3.3 SHARE into an
  921.         infinite loop.
  922.      2) PC-MOS/386 will always report SHARE.EXE as being present, as its
  923.         functions are duplicated within the PC-MOS/386 kernel.
  924.      3) If DOS 4.0's SHARE is loaded manually, either in the CONFIG or AUTOEXEC
  925.         file, it can't access the NUL device if 4DOS 3.x is installed. If
  926.         SHARE.EXE is in the root, the problem doesn't usually occur. It's been
  927.         reported that 4DOS is not the only program that has problems with
  928.         SHARE.EXE and the NUL device, so it's more likely to be an MS-DOS
  929.         problem than a 4DOS problem.  (dgh on BIX)
  930.      4) MS Windows intercepts this call and always returns nonzero regardless
  931.         of SHARE's presence.  If your program uses file sharing you should
  932.         try locking and reading a file and watch for the error codes returned
  933.         by int 21h/5Ch. (Lock/Unlock File)
  934.      5) SHARE function is built into DR-DOS 3.4x, but was removed to a 
  935.         separate TSR module in 5.0 and 6.0.
  936.  
  937.  
  938. Function   14h  NLSFUNC.COM
  939. entry   AH      14h
  940.         AL      00h     installation check
  941.                 return  AL      00h     not installed, OK to install
  942.                                 01h     not installed, not OK to install
  943.                                 0FFh    installed
  944.                 01h     unknown
  945.                 note    Calls int 2Fh/1227h under certain circumstances.
  946.                 02h     unknown
  947.                 note    Calls int 2Fh/1227h under certain circumstances.
  948.                 03h     unknown
  949.                 note    In DOS 3.3, appears to be identical to subfunction 01h.
  950. other parameters unknown
  951.  
  952.  
  953. Function   15h  CD-ROM extensions
  954.                 Microsoft CD-ROM driver versions 1.0 through 2.0 will work
  955.                 only up to DOS 3.31. DOS 4.0 and up require 2.1 drivers.
  956.                 MSCDEX abandons INT 13; and redirection within DOS to do its
  957.                 work. Some LAN software, such as LANtastic, uses the same
  958.                 mechanism to implement network drives. MSCDEX provides IFS
  959.                 functionality in any version of DOS back to 3.0.
  960.  
  961. entry   AH      15h     CD-ROM services
  962.         AL      subfunctions
  963.                 00h     Get Number of CD-ROM Drives (Installation Check)
  964.                 BX      00h
  965.                 return  BX      number of CD-ROM drive letters used
  966.                                 0000h   MSCDEX not installed
  967.                         CX      starting drive letter (0=A:, 1=B:, etc)
  968.                 note    This installation check does not follow the format used
  969.                         by other software.
  970.  
  971.                 01h     Get Drive Device List
  972.                 ES:BX   pointer to buffer to hold drive letter list
  973.                         (5 bytes per drive letter)
  974.                 return  buffer filled, for each drive letter:
  975.                         byte    subunit number in driver
  976.                         dword   address of device driver header
  977.  
  978.                 02h     Get Copyright File Name
  979.                 CX      drive number (0=A:)
  980.                 ES:BX   pointer to 38-byte buffer for name of copyright file
  981.                 return  CF      set if drive is not a CD-ROM drive
  982.                                 AX      error code  (15h)
  983.  
  984.                 03h     Get Abstract File Name
  985.                 ES:BX   pointer to 38-byte buffer for name of abstract file
  986.                 CX      drive number (0=A:)
  987.                 return  CF      set if drive is not a CD-ROM drive
  988.                                 AX      error code  (15h)
  989.  
  990.                 04h     Get Bibliographic Doc File Name
  991.                 CX      drive number (0=A:)
  992.                 ES:BX   pointer to 38-byte buffer for name of bibliographic
  993.                         documentation file
  994.                 return  CF      set if drive is not a CD-ROM drive
  995.                                 AX      error code  (15h)
  996.  
  997.                 05h     Read VTOC (Volume Table of Contents)
  998.                 CX      drive number (0=A:)
  999.                 DX      sector index (0=first volume descriptor, 1=second,...)
  1000.                 ES:BX   pointer to 2048-byte buffer
  1001.                 return  CF      set on error
  1002.                                 AX      error code (15h, 21h)
  1003.                         CF      clear if successful
  1004.                                 AX      volume descriptor type
  1005.                                         00h     other
  1006.                                         01h     standard
  1007.                                         0FFh    terminator
  1008.  
  1009.                 06h     Turn Debugging On
  1010.                 BX      debugging function to enable
  1011.                 note    Reserved for development.
  1012.  
  1013.                 07h     Turn Debugging Off
  1014.                 BX      debugging function to disable
  1015.                 note    Reserved for development.
  1016.  
  1017.                 08h     Absolute Disk Read
  1018.                 CX      drive number (0=A:)
  1019.                 DX      number of sectors to read
  1020.                 ES:BX   pointer to buffer
  1021.                 SI:DI   starting sector number
  1022.                 return  CF      set on error
  1023.                                 AL      error code  (15h, 21h)
  1024.  
  1025.                 09h     Absolute Disk Write
  1026.                 CX      drive number (0=A:)
  1027.                 DX      number of sectors to write
  1028.                 ES:BX   pointer to buffer
  1029.                 SI:DI   starting sector number
  1030.                 note    Corresponds to int 26h and is currently reserved and
  1031.                         nonfunctional.
  1032.  
  1033.                 0Ah     Reserved by Microsoft
  1034.  
  1035.                 0Bh     CD-ROM 2.00 - Drive Check
  1036.                 CX      drive number (0=A:)
  1037.                 return  BX      0ADADh if MSCDEX.EXE installed
  1038.                         AX      0000h   if drive not supported
  1039.                                 <>0     if supported
  1040.  
  1041.                 0Ch     CD-ROM 2.00 - Get MSCDEX.EXE Version
  1042.                 return  BH      major version
  1043.                         BL      minor version
  1044.                 note    MSCDEX.EXE versions prior to 1.02 return BX=0.
  1045.  
  1046.                 0Dh     CD-ROM 2.00 - Get CD-ROM Drive Letters
  1047.                 ES:BX   pointer to buffer for drive letter list
  1048.                         (1 byte per drive)
  1049.                 return  Buffer filled with drive numbers (0=A:). Each byte
  1050.                         corresponds to the drive in the same position for
  1051.                         function 1501h.
  1052.  
  1053.                 0Eh     CDROM 2.00 - Get/Set Volume Descriptor Preference
  1054.                 BX      subfunction
  1055.                         00h     Get Preference
  1056.                         DX      0000h
  1057.                         return  DX      preference settings
  1058.                         01h     Set Preference
  1059.                         DH      volume descriptor preference
  1060.                                 01h     primary volume descriptor
  1061.                                 02h     supplementary volume descriptor
  1062.                         DL      supplementary volume descriptor preference
  1063.                                 01h     shift-Kanji
  1064.                         CX      drive number (0=A:)
  1065.                         return  CF      set on error
  1066.                                         AX      error code  (01h, 15h)
  1067.  
  1068.                 0Fh     CD-ROM 2.00 - Get Directory Entry
  1069.                 CX      drive number (0=A:)
  1070.                 ES:BX   pointer to ASCIIZ pathname
  1071.                 SI:DI   pointer to 255-byte buffer for directory entry
  1072.                 return  CF      set on error
  1073.                                 AX      error code
  1074.                         CF      clear if succesful
  1075.                                 AX      disk format (0=High Sierra, 1=ISO 9660)
  1076.                 note    Directory entry format:
  1077.                         byte    length of directory entry
  1078.                         byte    length of XAR in LBN's
  1079.                         dword   LBN of data, Intel (little-Endian) format
  1080.                         dword   LBN of data, Motorola (big-Endian) format
  1081.                         dword   length of file, Intel format
  1082.                         dword   length of file, Motorola format
  1083.                ---High Sierra---
  1084.                       6 bytes   date and time
  1085.                         byte    bit flags
  1086.                         byte    reserved
  1087.                ---ISO 9660---
  1088.                       7 bytes   data and time
  1089.                         byte    bit flags
  1090.                ---both formats---
  1091.                         byte    interleave size
  1092.                         byte    interleave skip factor
  1093.                         word    volume set sequence number, Intel format
  1094.                         word    volume set sequence number, Motorola format
  1095.                         byte    length of file name
  1096.                       n bytes   file name
  1097.                         byte    (optional) padding if filename is odd length
  1098.                       n bytes   system data
  1099.  
  1100.                 Error codes:
  1101.                         01h     invalid function
  1102.                         15h     invalid drive
  1103.                         21h     not ready
  1104.  
  1105.  
  1106. Function   16h  MS-DOS Idle Call  (DOS 5.0+, OS/2 2.0, Windows 3.0+)
  1107. entry   AH      16h     idle call
  1108.         AL      80h     
  1109. return  AL      00h     idle call is supported
  1110.                 nonzero idle call is not supported
  1111. note 1) When your program is waiting for user input or otherwise not doing
  1112.         useful work, you can call this function in a loop.  Properly written
  1113.         background programs can monitor this call to determine if it is safe
  1114.         to do processing.  This call originated in Windows 3.0, then the
  1115.         OS/2 2.0 DOS box, and finally in DOS 5, where DOSSHELL uses it so
  1116.         processes can tell the shell when it is safe to swap tasks.
  1117.     
  1118.         The MS 5.0 Technical Reference recommends making sure the int 2Fh
  1119.         vector is nonzero before calling this function.  This would be to
  1120.         ensure you are running a DOS version that has 2Fh support.
  1121.  
  1122.         This call is nonblocking, that is, the system does not suspend the
  1123.         program unless another program is ready to run.  Usually the call
  1124.         returns immediately and the program continues running.
  1125.  
  1126.  
  1127. Function   1Ah  ANSI.SYS   (DOS 4.0+)
  1128. entry   AH      00h     Installation Check
  1129.                 return  AL      00h     not installed
  1130.                                 0FFh    if installed
  1131.                 01h     Get/Set Display Information
  1132.                         CL      5Fh     set information
  1133.                                 7Fh     get information
  1134.                                 DS:DX   pointer to parm block as for int 21h,
  1135.                                         AX=440Ch, CX=037Fh/035Fh respectively
  1136.                 return  CF      set     on error
  1137.                                         AX      error code (unknown)
  1138.                                 clear   if successful
  1139.                 note 1) AX is destroyed.
  1140.                      2) May be the DOS IOCTL interface to ANSI.SYS.
  1141.  
  1142.  
  1143. Function   1Bh  XMA2EMS.SYS   (DOS 4.0+)
  1144. entry   AH      00h     Installation Check
  1145.                 return  AL      0FFh    if installed
  1146.                 01h     Get Hidden Frame Information
  1147.                         DI      hidden physical page number
  1148.                 return  AX      0000h if successful
  1149.                                         ES      segment of page frame
  1150.                                         DI      physical page number
  1151.                                 0FFFFh if failed (no such hidden page)
  1152. note 1) XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  1153.         This extension hooks onto int 67h fn58h and returns from that call data
  1154.         which excludes the physical pages being used by DOS.
  1155.      2) Fn 02h corresponds to the data edited out of the int 67h/fn 58h call.
  1156.  
  1157.  
  1158. Function  43h   Microsoft Extended Memory Specification (XMS)
  1159.                 The XMS version 2.00 for MS-DOS allows DOS programs to utilize
  1160.                 additional memory found in 80286 and 80386 machines. With some
  1161.                 restrictions, XMS adds about 64K to the 640K which DOS programs
  1162.                 can access directly. XMS also provides DOS programs with a
  1163.                 standard method of storing data in extended memory.
  1164.                 See Chapter 10 for API.
  1165.  
  1166.  
  1167. Function  48h   DOSKEY.COM (DOS 5.0+)
  1168. entry   AH      48h     DOSKEY.COM
  1169.         AL      00h     Get Installed State
  1170. return  AL      00h     not installed
  1171.                 0FFh    installed
  1172.  
  1173.         AL      10h     Read Command Line
  1174.                 DS:DX   pointer to buffer to take the command line
  1175.                         buffer:
  1176.                         offset  description
  1177.                         00h     buffer size (max 128 bytes)
  1178.                         01h     the number of characters, minus 1.  The final
  1179.                                 CR is copied to the buffer but not included in
  1180.                                 the byte count.
  1181.                         02h     the first byte of the input line.
  1182. return  AX      0000h
  1183.                 DS:DX   filled with command line
  1184. note    AX=0 if the user types a macro name, and the buffer is not filled.
  1185.         Your program must call the function a second time to expand the macro
  1186.         and copy the macro text to the buffer.
  1187.  
  1188.  
  1189. Function  4Ah   DOS 5.0 HMA Services (undocumented)
  1190. entry   AH      4Ah
  1191.         AL      01h     Get Size
  1192. return  BX      number of bytes (possibly 0) of available HMA
  1193.         ES:DI   start of the available HMA
  1194.  
  1195.  
  1196. Function  64h   SCRNSAV2
  1197. entry   AH      64h
  1198.         AL      00h     installation check
  1199. return  AL      00h     not installed
  1200.                 0FFh    installed
  1201. note    SCRNSAV2.COM is a screen blanker for PS/2s with VGA by Alan Ballard.
  1202.  
  1203.  
  1204. Function  7Ah   Novell NetWare
  1205. entry   AH      7Ah
  1206.         AL      00h     installation check
  1207. return  AL      00h     not installed
  1208.                 0FFh    installed
  1209.         ES:DI   pointer to FAR entry point for routines otherwise accessed
  1210.                 through int 21h
  1211. note 1) Returns address of entry point for IPX and SPX.
  1212.      2) Parameters are listed in Chapter 13.
  1213.  
  1214.  
  1215. Function  87h   APPEND
  1216. entry   AH      87h
  1217.         AL      00h     APPEND installation check
  1218.                 return  AH <> 0 if installed
  1219.                 01h     APPEND - unknown
  1220.                 02h     APPEND - version check
  1221. return  unknown
  1222.  
  1223.  
  1224. Function  88h   Microsoft Networks
  1225. entry   AH      88h
  1226.         AL      00h     network program installation check
  1227.                 return  AH <> 0 if installed
  1228.                         BX      installed component flags (test in this order!)
  1229.                            bits 2       messenger
  1230.                                 3       redirector
  1231.                                 6       server
  1232.                                 7       receiver
  1233.                                 other bits not used, do not test
  1234.                 01h     unknown
  1235.                 02h     unknown
  1236.                 03h     get current POST address
  1237.                         return  ES:BX   POST address
  1238.                 04h     set new POST address
  1239.                         ES:BX   new POST address
  1240.                 09h     network version check
  1241.  
  1242.  
  1243. Function  89h   WHOA!           (slows system down for games)
  1244. entry   AH      89h
  1245.         AL      00h     installation check
  1246.                 return  AL      00h     not installed
  1247.                                 0FFh    installed
  1248.                 01h     uninstall
  1249.                 return  AL      0FDh    successful
  1250.                                 0FEh    error
  1251.                 02h     set delay count
  1252.                 BX = delay count (larger values slow system down more)
  1253.                 return  AL      0FDh    successful
  1254.                                 0FEh    error
  1255. note    WHOA!.COM is copyright COMPUTE! Publications and Brad Crandall.
  1256.  
  1257.  
  1258. Function  0AAh  VIDCLOCK.COM
  1259. entry   AH      0AAh
  1260.         AL      00h     installation check
  1261. return  AL      00h     not installed
  1262.                 0FFh    installed
  1263. note    VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III.
  1264.  
  1265.  
  1266. Function  0ADh  KEYB.COM                                        (DOS 3.3+)
  1267. entry   AH      0ADh
  1268.         AL      80h     Get KEYB.COM Version Number
  1269. return
  1270.         BX      00h     not installed
  1271.                 nonzero installed
  1272.                         BH      major version number
  1273.                         BL      minor version number
  1274. ---
  1275.         AL      81h     Set KEYB.COM Active Code Page
  1276.         BX      code page ID
  1277.                 437     USA
  1278.                 850     Multilingual (Latin I)
  1279.                 852     Multilingual (Latin II)
  1280.                 860     Portuguese
  1281.                 863     French-Canadian
  1282.                 865     Nordic
  1283. return  CF      clear   successful
  1284.                 set
  1285.                 AX      0001h   if code page is not valid
  1286. ---
  1287.         AL      82h     Set KEYB.COM Country Flag
  1288.         BL      00h     domestic (USA) keyboard
  1289.                 0FFh    not USA keyboard
  1290. return  CF      clear   successful
  1291.                 set     invalid value was passed in BL
  1292. ---
  1293.         AL      83h     Get KEYB.COM Country Flag
  1294. return  BL      current country flag value (should be 00h or 0FFh)
  1295.  
  1296. note    Some of these functions are available in DOS 3.3 and 4.0, but were
  1297.         not documented.  These descriptions are for DOS 5.0.
  1298.  
  1299.  
  1300. Function  0B0h  GRAFTABL.COM                                    (DOS 3.3+)
  1301. entry   AH      0B0h
  1302.         AL      00h     installation check
  1303.         return  AL      00h     not installed, OK to install
  1304.                         0FFh    installed
  1305. note 1) Also used by DISPLAY.SYS.
  1306.  
  1307.  
  1308. Function  0B7h  APPEND.EXE                                      (DOS 3.3+)
  1309. entry   AH      0B7h
  1310.         AL      00h     installation check
  1311.                 return  AH      00h     not installed
  1312.                                 nonzero installed (3.3-4.0)
  1313.                                 0FFh    installed (5.0)
  1314.  
  1315.                 01h     unknown
  1316.  
  1317.                 02h     version check
  1318.                 return  AH      minor version number, otherwise
  1319.                         AL      major version number
  1320.                 note    The MS 5.0 TR reports AX should be 0FFFFh for versions
  1321.                         compatible with DOS 5.0.  However, DOS 4.0 returns
  1322.                         the same value.
  1323.  
  1324.                 03h     unknown
  1325.  
  1326.                 04h     get APPEND directory list address       (DOS 4.0+)
  1327.                 return  ES:DI   pointer to active APPEND path (128 bytes max)
  1328.                                 in ASCIIZ format
  1329.  
  1330.                 05h     unknown
  1331.  
  1332.                 06h     get APPEND modes flag                   (DOS 4.0+)
  1333.                 return  BX      APPEND state
  1334.                            bits 0       set if APPEND enabled
  1335.                                 1-B     reserved, must be zero
  1336.                                 C       appends dirs to file requests that
  1337.                                         already specify a drive
  1338.                                 D       applies dirs to file requests that
  1339.                                         already specify a PATH.  Set if /PATH
  1340.                                         flag active
  1341.                                 E       stores the appended dirs in the APPEND
  1342.                                         environment variable.  Set if /E flag
  1343.                                         active
  1344.                                 F       applies dirs to functions like EXEC
  1345.                                         (21h/4B00h) or FIND FIRST (21h/4Eh).
  1346.                                         Set if /X flag active.
  1347.                 note    Returns the current operation modes for APPEND.
  1348.  
  1349.                 07h     set APPEND modes flag                   (DOS 4.0+)
  1350.                         BX      APPEND state bits (see 06h)
  1351.                 return  none
  1352.  
  1353.                 08h     unknown
  1354.                 09h     unknown
  1355.                 0Ah     unknown
  1356.                 10h     unknown
  1357.  
  1358.                 11h     set TRUENAME flag                       (DOS 4.0+)
  1359.                 note 1) This call has no parameters.
  1360.                      2) If the next int 21h call is function 3Dh, 43h, 4Eh or
  1361.                         6Ch, the fully qualified filename is written over top
  1362.                         of the filename passed to the int 21h call. The
  1363.                         application must provide a sufficiently large buffer.
  1364.                         This state is reset after APPEND processes the call.
  1365.  
  1366. note 1) (4.0+) The full path name can be retrieved by doing a int 2Fh fn 0B711h
  1367.         before an open (int 21h 3Dh or 6Ch). The full path is put in your
  1368.         ASCIIZ string when you do the open, so be sure it is long enough.
  1369.      2) The APPEND command apparently covers parts of int 21h/6Ch even though
  1370.         Microsoft's 4.01 User's Reference says it covers only 0Fh, 23h, 2Dh,
  1371.         11h, 4Eh & 4Bh, some of those do require special switches. For 6Ch, it
  1372.         may be a function of the DX register. If DX=xx1x it looks only in the
  1373.         current directory, if DX=xx0x it will search the full append path. DX
  1374.         is called the open flag and gives what action to take if the file exits
  1375.         or does not exist.
  1376.  
  1377.  
  1378. Function  0B8h  Network
  1379. entry   AH      0B8h
  1380.         AL      00h     installation check
  1381.                 return  AH      00h     not installed
  1382.                                 <>0     installed
  1383.                         BH      00h
  1384.                         BL      installed component flags (test in this order
  1385.                            bits 0000100 server             according to PC-LAN)
  1386.                                 0000100 messenger
  1387.                                 0100000 receiver
  1388.                                 1000000 redirector
  1389. (LANtastic)     return  AL      00h     neither redirector or server installed
  1390.                                 0FFh    redirector or server installed
  1391.                         BL      bits indicating which software is installed
  1392.                                (both will be set when both software is running)
  1393.                                 01000000b       server is installed
  1394.                                 00001000b       redirector is installed
  1395.                 01h     unknown
  1396.                 02h     unknown
  1397.                 03h     get current POST address
  1398.                 return  ES:BX   POST address
  1399.                 04h     set new POST address
  1400.                         ES:BX   new POST address
  1401.                 note 1) When a POST address is set, it gets control on any
  1402.                         network event (message-received or network error).
  1403.                      2) Inputs to Message-Received Event Handler
  1404.                         entry   AH      00h
  1405.                                 AL      00h     single block message
  1406.                                 DS:SI   pointer to ASCIIZ originator name
  1407.                                 DS:DI   pointer to ASCIIZ destination name
  1408.                                 ES:BX   pointer to text header
  1409.                         entry   AH      00h
  1410.                                 AL      01h     start multiple block message
  1411.                                 DS:SI   pointer to ASCIIZ originator name
  1412.                                 DS:DI   pointer to ASCIIZ destination name
  1413.                                 CX      block group identifier
  1414.                         entry   AH      00h
  1415.                                 AL      02h     multiple block text
  1416.                                 CX      block group identifier
  1417.                                 ES:BX   pointer to text header
  1418.                         entry   AH      00h
  1419.                                 AL      03h     end multiple block message
  1420.                                 CX      block group identifier
  1421.                         entry   AH      00h
  1422.                                 AL      04h     message aborted due to error
  1423.                                 CX      block group identifier
  1424.                         entry   AH      00h
  1425.                                 AL      04h     message aborted due to error
  1426.                                 CX      block group identifier
  1427.                         entry   AH      00h
  1428.                                 AL      04h     message aborted due to error
  1429.                                 CX      block group identifier
  1430.                 return  AL      00h     user POST routine processed the message
  1431.                                 01h     the network will process the message
  1432.                                 0FFh    network will process message, but
  1433.                                         message window will not be displayed
  1434.                      2) Inputs to Network Critical Error Handler
  1435.                         entry   AH      01h
  1436.                                 AL      01h     server received badly formatted
  1437.                                                 network request
  1438.                         return  0FFh    network will process the error
  1439.                         entry   AH      01h
  1440.                                 AL      02h     unexpected network error
  1441.                         return  00h     user POST routine handled error OK
  1442.                                 01h     reissue network control block
  1443.                                 0FFh    network will process the error
  1444.                         entry   AH      01h
  1445.                                 AL      03h     server got DOS int 24h error
  1446.                         return  00h     user POST routine handled error OK
  1447.                                 0FFh    network will process the error
  1448.                      3) Use an IRET to return from POST handler.
  1449.                      4) For multiple block messages, the application must
  1450.                         respond with the same AX value for all message blocks
  1451.                         in a single message group.
  1452.                      5) Text header format:
  1453.                         DW      length          ;length of text
  1454.                         DB      length dup(?)   ;text of message
  1455.                      6) Network event handlers should not user DOS FCB calls,
  1456.                         attempt to allocate memory, or terminate a running app.
  1457.                 05h     unknown
  1458.                 06h     unknown
  1459.                 07h     unknown
  1460.                 08h     unknown
  1461.                 09h     version check
  1462.                 return  AH      major version number
  1463.                         AL      minor version number
  1464.                 note    The version numbers are returned in hexadecimal. For
  1465.                         example, version 2.52 would be:
  1466.                         AH      2
  1467.                         AL      34h (52 decimal)
  1468.  
  1469.  
  1470. Function  0C7h  Artisoft LANtastic AI-LANBIOS
  1471. note    This is the default entry point for the LANtastic NOS serial and
  1472.         parallel port drivers.
  1473.  
  1474.  
  1475. Function 0D44Dh 4DOS v3.01,+ Command Interpreter  (COMMAND.COM replacement)
  1476. entry   AX      0D44Dh  4DOS installation check
  1477. return  If 4DOS is present in memory the following values will be returned:
  1478.         AX      44DDh
  1479.         BH      minor 4DOS version number
  1480.         BL      major 4DOS version number (same format as DOS int 21h/fn 30h)
  1481.         CX      4DOS PSP segment address
  1482.         DL      4DOS shell number (0 for the first shell, 1 for the second,
  1483.                 etc.; incremented each time a new copy of 4DOS is loaded over a
  1484.                 root copy, either in a different multitasker window or via
  1485.                 nested shells)
  1486. note 1) (excerpted from 4DOS 3.01 manual)
  1487.         4DOS now generates two different INT 2F calls to allow TSRs to
  1488.         tell when 4DOS is back at the prompt.  These calls have AX =
  1489.         D44Eh.  The first occurs immediately before displaying the
  1490.         prompt, with BX = 0; the second occurs after displaying the
  1491.         prompt and immediately before accepting keyboard input, with BX =
  1492.         1.  Any routine intercepting these calls should preserve at least
  1493.         the SI, DI, BP, SP, DS, ES, and SS registers.
  1494.      2) This function (440Dh) is only available in swapping mode.  It tells you
  1495.         if 4DOS is loaded in memory, but not whether it is the parent
  1496.         process of your program.  You can determine if 4DOS is the parent
  1497.         process by comparing the PSP value returned in CX to the PSP
  1498.         chain pointer at offset 16h in your program's PSP.
  1499.  
  1500.  
  1501. Function  0E3h  AnarKey    (keyboard command stack and alias program)
  1502. entry   AH      0E3h
  1503.         AL      00h     installation check
  1504.         return  AL      00h     not installed
  1505.                         0FFh    installed
  1506. note    (excerpted from the AnarKey documentation)
  1507.         Upon installation, ANARKEY hooks into two interrupts:
  1508.         1) Interrupt used to install program signature
  1509.                 -DOS versions before 3.1 use one interrupt between 60h-67h
  1510.                 -DOS 3.1 and later use interrupt 2Fh
  1511.         2) Interrupt 21h, function 0Ah
  1512.         Upon initial program execution, a program "signature" is installed which
  1513.         is used by ANARKEY to prevent itself from being installed more than
  1514.         once. Depending upon the DOS version, a different method of signature
  1515.         installation is performed.
  1516.          Under DOS 2.x thru 3.0, ANARKEY scans interrupt vectors 60h thru 67h
  1517.         searching for an unused vector (signified by a null value).  If an
  1518.         unused vector is found, ANARKEY takes it and installs its program
  1519.         signature there. If all the vectors are in use, ANARKEY does not
  1520.         install a program signature.
  1521.          Running DOS 3.1 and later, ANARKEY chains into interrupt 2Fh. By
  1522.         default, ANARKEY appropriates process number 0E3h.
  1523.  
  1524.  
  1525. Function  0F7h  AUTOPARK.COM  (PD TSR hard disk parking utility)
  1526. entry   AH      0F7h
  1527.         AL      00h     installation check
  1528.                 return  AL      00h     not installed
  1529.                                 0FFh    installed
  1530.         01h     set parking delay
  1531.                 BX:CX   32 bit count of 55ms timer ticks
  1532. note    AUTOPARK is a TSR HD parker by Alan D. Jones.
  1533.  
  1534.  
  1535. Function        Intel Communicating Applications Standard (CAS 1.01A)
  1536. entry   AH              (default; CAS multiplex number can be user-adjusted)
  1537.         AL      00h     Get Installed State
  1538.                         return  AL      00h     not installed
  1539.                                         01h     not installed, not OK to install
  1540.                                         0FFh    installed
  1541.                         note    No errors are returned.
  1542.                 01h     Submit a Task
  1543.                         DS:DX   ptr to ASCIIZ path and name of Task Control File
  1544.                         return  AX      positive event handle or neg. error code
  1545.                         note    Files associated with a task must stay in
  1546.                                 existence until the task is complete or an
  1547.                                 error will result.
  1548.                 02h     Abort the Current Event
  1549.                         return  AX      event handle of aborted event or
  1550.                                         negative error code
  1551.                         note    Terminating an event is not instantaneous. It
  1552.                                 might take up to 30 seconds.
  1553.                 03h     reserved
  1554.                 04h     reserved
  1555.                 05h     Find First Entry in Queue
  1556.                         CX      Status of the event you are seeking. This value
  1557.                                 is compared with the field at offset 2 of the
  1558.                                 Control File
  1559.                                 0 - event has successfully completed
  1560.                                 1 - event is waiting to be processed
  1561.                                 2 - number has been dialed
  1562.                                 3 - connection has been made (sending)
  1563.                                 4 - connection has been made (receiving)
  1564.                                 5 - event was aborted
  1565.                                -1 - chooses an event without regard to status
  1566.                                     This value will probably be used most often
  1567.                                 Other negative values match error codes in
  1568.                                 Control File.
  1569.                         DH      direction:
  1570.                                 0 - Search forward chronologically (from the
  1571.                                     first to the last occurring event)
  1572.                                 1 - Search backward chronologically (from the
  1573.                                     last to the first occurring event)
  1574.                         DL      queue to search:
  1575.                                 0 - Find first control file in Task Queue
  1576.                                 1 - Find first control file in Receive Queue
  1577.                                 2 - Find first control file in Log Queue
  1578.                         return  AX      0, if successful, or negative error code
  1579.                                 BX      event handle for this file
  1580.                 06h     Find Next Entry in Queue
  1581.                         DL      queue to search:
  1582.                                 0 - Find next control file in Task Queue
  1583.                                 1 - Find next control file in Receive Queue
  1584.                                 2 - Find next control file in Log Queue
  1585.                         return  AX      0, if successful, or negative error code
  1586.                                 BX      event handle for this file
  1587.                 07h     Open a File
  1588.                         BX      event handle
  1589.                         CX      receive file number
  1590.                                 0 - the Receive Control File
  1591.                                 1 - first received file
  1592.                                 2 - second received file
  1593.                                 3 - third received file
  1594.                                 n - nth received file
  1595.                         DL      queue:
  1596.                                 0 - open control file in Task Queue
  1597.                                 1 - open control file in Receive Queue or the
  1598.                                     received data
  1599.                  file specified in the CX register.
  1600.                                 2 - Open control file in Log Queue.
  1601.                         return  AX      0 if successful, or negative error code
  1602.                                 BX      DOS file handle for the requested file
  1603.                 08h     Delete a File
  1604.                         BX      event handle
  1605.                         CX      receive file number
  1606.                                 0 - delete all files associated with a specific
  1607.                                     Receive Control File (including the RCF)
  1608.                                 1 - delete first received file associated with
  1609.                                     the event handle
  1610.                                 2 - delete the second received file associated
  1611.                                     with the event handle.
  1612.                                 n - delete the nth received file associated with
  1613.                                     the event handle
  1614.                         DL      queue:
  1615.                                 0 - delete control file in Task Queue
  1616.                                 1 - delete a file or files associated with an
  1617.                                     event in the Receive Queue.
  1618.                                 2 - delete control file in Log Queue
  1619.                                     note   It is strongly recommended that this
  1620.                                     function NOT be used to delete individual
  1621.                                     Log Control Files to maintain the integrity
  1622.                                     of the log.
  1623.                         return  AX      0 if successful, or negative error code
  1624.                 09h     Delete All Files (in a queue)
  1625.                         DL      queue:
  1626.                                 0 - delete all control files in the Task Queue
  1627.                                 1 - delete all control files in the Receive
  1628.                                     Queue and all received files
  1629.                                 2 - delete all control files in the Log Queue
  1630.                         return  AX      0 if successful or negative error code
  1631.                 0Ah     Get Event Date
  1632.                         BX      event handle of event whose date you want to get
  1633.                         DL      queue:
  1634.                                 0 - task queue
  1635.                                 1 - receive queue
  1636.                                 2 - log queue
  1637.                         return  AX      0 if successful or negative error code
  1638.                                 CX      year  (1980-2099)
  1639.                                 DH      month (1-12)
  1640.                                 DL      day   (1-31)
  1641.                 0Bh     Set Task Date
  1642.                         BX      event handle
  1643.                         CX      year  (1980-2099)
  1644.                         DH      month (1-12)
  1645.                         DL      day   (1-31)
  1646.                         return  AX      0 if successful or negative error code
  1647.                 0CH     Get Event Time
  1648.                         BX      event handle
  1649.                         DL      queue:
  1650.                                 0 - task queue
  1651.                                 1 - receive queue
  1652.                                 2 - log queue
  1653.                         return  AX      0 if successful or negative error code
  1654.                                 CH      hour    (0-23)
  1655.                                 CL      minutes (0-59)
  1656.                                 DH      seconds (0-59)
  1657.                                 DL      0
  1658.                 0DH     Set Task Time
  1659.                         BX      event handle
  1660.                         CH      hour    (0-23)
  1661.                         CL      minutes (0-59)
  1662.                         DH      seconds (0-59)
  1663.                         DL      unused
  1664.                         return  AX      0 if successful or negative error code
  1665.                 0EH     Get External Data Block
  1666.                         DS:DX points to a 256-byte EDB area
  1667.                         return  AX      0 if successful or negative error code
  1668.                         note    EDB area is filled with the External Data Block
  1669.                                 block format: (values in decimal)
  1670.                               Offset Length        Description
  1671.                                  0    1    CAS major version number
  1672.                                  1    1    CAS minor version number
  1673.                                  2    68   ASCIIZ path to directory containing
  1674.                                            Resident Manager and CAS software.
  1675.                                            The path must end with a backslash
  1676.                                  70   13   ASCIIZ name of current phonebook
  1677.                                            (the CAS subdirectory is assumed)
  1678.                                  83   13   AZCIIZ name of current logo file
  1679.                                            (the CAS subdirectory is assumed)
  1680.                                  96   32   ASCIIZ default sender name
  1681.                                  128  21   ASCIIZ CSID (CCITT fax device ID)
  1682.                                  149  107  Reserved
  1683.                 0Fh     Get/Set Autoreceive State
  1684.                         DL      function code:
  1685.                                 0 - get current autoreceive state
  1686.                                 1 - set current state to value in DH
  1687.                                 DH      # rings before answer or 0 to disable
  1688.                         return  AX      current state or negative error code
  1689.                                         0 - Autoreceive disabled
  1690.                                         positive # - # rings before hdw answers
  1691.                 10h     Get Current Event Status
  1692.                         DS:DX   pointer to a 444 byte status area
  1693.                         return  AX      0 if successful or negative error code
  1694.                                 BX      number of the current event (AX=0)
  1695.                 11h     Get Queue Status
  1696.                         DL      queue:
  1697.                                 0 - find status of Task Queue
  1698.                                 1 - find status of Receive Queue
  1699.                                 2 - find status of Log Queue
  1700.                         return  AX      # changes to queue since Resident
  1701.                                         Manager started or negative error code
  1702.                                         If changes exceeds 7FFFH, the count
  1703.                                         begins again at 0.
  1704.                                 BX      current # of Control Files in queue
  1705.                                 CX      current # of received files
  1706.                 12h     Get Hardware Status
  1707.                         DS:DX   pointer to a 128-byte status area
  1708.                         return  AX      0 if successful, negative if not
  1709.                         DS:DX   pointer to filled 128-byte status area
  1710.                 13h     Run Diagnostics
  1711.                         DL      Mode
  1712.                                 0 - report progress of diagnostics
  1713.                                 1 - start running diagnostics
  1714.                         return  if DL=1, AX=0 or a negative error code.
  1715.                                 if DL=0, AX=40h or positive number indicating
  1716.                                          diagnostics passed. A negative value
  1717.                                          indicates failure and containes the
  1718.                                          error code
  1719.                 14h     Move Received File
  1720.                         BX      event handle
  1721.                         CX      receive file number
  1722.                                 (must be nonzero to specify a received file)
  1723.                                 1 - first received file
  1724.                                 2 - second received file
  1725.                                 3 - third received file
  1726.                                 n - nth received file
  1727.                         DS:DX   pointer to new ASCIIZ pathname and filename.
  1728.                                 This file must not exist already
  1729.                         return  AX      0 if successful or negative error code
  1730.                         note    The path to the new directory must exist.
  1731.                                 This function cannot create directories.
  1732.                 15h     Submit a Single File to Send
  1733.                         DS:DX   pointer to variable-length data area
  1734.                         return  AX      positive event handle or neg. error code
  1735.                         note 1) variable-length data area format:
  1736.                              Offset Length    Description
  1737.                                 0    1    Transfer type:
  1738.                                           0 - 200x200 dpi, facsimile mode
  1739.                                           1 - 100x200 dpi, facsimile mode
  1740.                                           2 - file transfer mode
  1741.                                           3-127 - Reserved.
  1742.                                 1    1    Text size (if ASCII file, fax mode)
  1743.                                           0 - 80-column
  1744.                                           1 - 132-column
  1745.                                           2-127 - reserved
  1746.                                 2    2    time to send, in DOS file time format
  1747.                                 4    2    date to send, in DOS file time format
  1748.                                           note: Setting both the time and date
  1749.                                           fields to 0 schedules the file to be
  1750.                                           sent immediately
  1751.                                 6    32   ASCIIZ Destination Name  (To: field)
  1752.                                 38   80   ASCIIZ pathname of the file to send
  1753.                                 118  47   ASCIIZ phone number to call
  1754.                                 165  64   ASCIIZ application-specific tag field
  1755.                                 229  1    reserved; set to zero
  1756.                                 230  1    cover page flag:
  1757.                                           0 - don't send cover page
  1758.                                           1 - send cover page
  1759.                                           2-127 - Reserved
  1760.                                 231  23   reserved; set to zero
  1761.                                 254  var  ASCIIZ cover text (if offset 230=1)
  1762.                              2) The individual fields have the same meaning as
  1763.                                 in a Task Control File
  1764.                              3) You must set all fields, except for the Appli-
  1765.                                 cation-Specific Tag field, before calling this
  1766.                                 function. However, you can set the Destination
  1767.                                 Name and Cover Text fields to an empty string
  1768.                 16h-80h Reserved by Intel for future expansion
  1769.  
  1770.  
  1771.  
  1772. DOS 2Fh functions 01h (PRINT), 02h (ASSIGN), 10h (SHARE):
  1773. return  AX      Error
  1774.                 Codes       Description
  1775.                 01h     invalid function number
  1776.                 02h     file not found
  1777.                 03h     path not found
  1778.                 04h     too many open files
  1779.                 05h     access denied
  1780.                 06h     invalid handle
  1781.                 08h     queue full
  1782.                 09h     busy
  1783.                 0Ch     name too long
  1784.                 0Fh     invalid drive was specified
  1785.         CF      clear (0) if OK
  1786.                 set   (1) if error - error returned in AX
  1787. note 1) The multiplex numbers AH=0h through AH=7Fh are reserved for DOS.
  1788.         Applications should use multiplex numbers 80h through 0FFh.
  1789.      2) When in the chain for int 2Fh, if your code calls DOS or if you execute
  1790.         with interrupts enabled, your code must be reentrant/recursive.
  1791.      3) Important! In versions of DOS prior to 3.0, the int 2Fh vector was
  1792.         initialized to zero rather than being pointed into the DOS service area.
  1793.         You must initialize this vector manually under DOS 2.x.
  1794.  
  1795.  
  1796.  
  1797. ┌─────────────────────────────────────────────────────────────────────────────┐
  1798. │ Miscellaneous Interrupts - in numeric order                                 │
  1799. └─────────────────────────────────────────────────────────────────────────────┘
  1800.  
  1801.  
  1802. ┌─────────────────────────────────────────────────────────────────────────────┐
  1803. │Interrupt 30h   FAR jump instruction for CP/M-style calls ............. 5**15│
  1804. └─────────────────────────────────────────────────────────────────────────────┘
  1805. note 1) The CALL 5 entry point does a FAR jump to here  (not a vector!)
  1806.      2) PC-Tools PC-Cache 5.1 hooks this vector on XTs but not on ATs.
  1807.  
  1808.  
  1809. ┌─────────────────────────────────────────────────────────────────────────────┐
  1810. │Interrupt 31h   Unknown ............................................... 5**16│
  1811. └─────────────────────────────────────────────────────────────────────────────┘
  1812. note    PC-Tools PC-Cache 5.1 hooks this vector on ATs but not on XTs.
  1813.  
  1814.  
  1815. ┌─────────────────────────────────────────────────────────────────────────────┐
  1816. │Interrupt 32h   Unknown ............................................... 5**17│
  1817. └─────────────────────────────────────────────────────────────────────────────┘
  1818.  
  1819.  
  1820. ┌─────────────────────────────────────────────────────────────────────────────┐
  1821. │Interrupt 33h   Used by Microsoft Mouse Driver Function Calls ......... 5**18│
  1822. └─────────────────────────────────────────────────────────────────────────────┘
  1823. note    See Chapter 14 for mouse programming.
  1824.  
  1825.  
  1826. ┌─────────────────────────────────────────────────────────────────────────────┐
  1827. │Interrupt 34h   Turbo C/Microsoft languages - Floating Point emulation  5**19│
  1828. └─────────────────────────────────────────────────────────────────────────────┘
  1829. note    This interrupt emulates opcode 0D8h.
  1830.  
  1831.  
  1832. ┌─────────────────────────────────────────────────────────────────────────────┐
  1833. │Interrupt 35h   Turbo C/Microsoft languages - Floating Point emulation  5**20│
  1834. └─────────────────────────────────────────────────────────────────────────────┘
  1835. note    This interrupt emulates opcode 0D9h.
  1836.  
  1837.  
  1838. ┌─────────────────────────────────────────────────────────────────────────────┐
  1839. │Interrupt 36h   Turbo C/Microsoft languages - Floating Point emulation  5**21│
  1840. └─────────────────────────────────────────────────────────────────────────────┘
  1841. note    This interrupt emulates opcode 0DAh.
  1842.  
  1843.  
  1844. ┌─────────────────────────────────────────────────────────────────────────────┐
  1845. │Interrupt 37h   Turbo C/Microsoft languages - Floating Point emulation  5**22│
  1846. └─────────────────────────────────────────────────────────────────────────────┘
  1847. note    This interrupt emulates opcode 0DBh.
  1848.  
  1849.  
  1850. ┌─────────────────────────────────────────────────────────────────────────────┐
  1851. │Interrupt 38h   Turbo C/Microsoft languages - Floating Point emulation  5**23│
  1852. └─────────────────────────────────────────────────────────────────────────────┘
  1853. note 1) This interrupt emulates opcode 0DCh.
  1854.      2) PC-MOS/386 versions prior to 4.00 use this interrupt to interface
  1855.         with the PC-MOS API. Version 4.00 and later use int 0D4h for the API.
  1856.         See the Chapter 13 for the PC-MOS API.
  1857.  
  1858.  
  1859. ┌─────────────────────────────────────────────────────────────────────────────┐
  1860. │Interrupt 39h   Turbo C/Microsoft languages - Floating Point emulation  5**24│
  1861. └─────────────────────────────────────────────────────────────────────────────┘
  1862. note    This interrupt emulates opcode 0DDh.
  1863.  
  1864.  
  1865. ┌─────────────────────────────────────────────────────────────────────────────┐
  1866. │Interrupt 3Ah   Turbo C/Microsoft languages - Floating Point emulation  5**25│
  1867. └─────────────────────────────────────────────────────────────────────────────┘
  1868. note    This interrupt emulates opcode 0DEh.
  1869.  
  1870.  
  1871. ┌─────────────────────────────────────────────────────────────────────────────┐
  1872. │Interrupt 3Bh   Turbo C/Microsoft languages - Floating Point emulation  5**26│
  1873. └─────────────────────────────────────────────────────────────────────────────┘
  1874. note    This interrupt emulates opcode 0DFh.
  1875.  
  1876.  
  1877. ┌─────────────────────────────────────────────────────────────────────────────┐
  1878. │Interrupt 3Ch   Turbo C/Microsoft languages - Floating Point emulation  5**27│
  1879. └─────────────────────────────────────────────────────────────────────────────┘
  1880. note    This interrupt emulates instructions with an ES segment override.
  1881.  
  1882.  
  1883. ┌─────────────────────────────────────────────────────────────────────────────┐
  1884. │Interrupt 3Dh   Turbo C/Microsoft languages - Floating Point emulation  5**28│
  1885. └─────────────────────────────────────────────────────────────────────────────┘
  1886. note    This interrupt emulates a standalone FWAIT instruction
  1887.  
  1888.  
  1889. ┌─────────────────────────────────────────────────────────────────────────────┐
  1890. │Interrupt 3Eh   Turbo C/Microsoft languages - Floating Point emulation  5**29│
  1891. └─────────────────────────────────────────────────────────────────────────────┘
  1892. note    Unknown.
  1893.  
  1894.  
  1895. ┌─────────────────────────────────────────────────────────────────────────────┐
  1896. │Interrupt 3Fh   Overlay Manager Interrupt (Microsoft LINK.EXE) ........ 5**30│
  1897. └─────────────────────────────────────────────────────────────────────────────┘
  1898. note 1) Default overlay manager interrupt; may be changed with LINK command
  1899.         line switch. (Microsoft/IBM LINK.EXE)
  1900.      2) The Microsoft Dynamic Link Library manager uses this interrupt.
  1901.  
  1902.  
  1903. ┌─────────────────────────────────────────────────────────────────────────────┐
  1904. │Interrupt 40h   Hard Disk BIOS ........................................ 5**31│
  1905. └─────────────────────────────────────────────────────────────────────────────┘
  1906.                 Pointer to disk BIOS entry when a hard disk controller is
  1907.                 installed. The BIOS routines use int 30h to revector the
  1908.                 diskette handler (original int 13h) here so int 40h may be
  1909.                 used for hard disk control.
  1910. note 1) Keyboard interrupt for DEC Rainbow.
  1911.  
  1912.  
  1913. ┌─────────────────────────────────────────────────────────────────────────────┐
  1914. │Interrupt 41h   Hard Disk Parameters .................................. 5**32│
  1915. └─────────────────────────────────────────────────────────────────────────────┘
  1916.                 Pointer to first Hard Disk Parameter Block, normally located
  1917.                 in the controller card's ROM. This table may be copied to RAM
  1918.                 and changed, and this pointer revectored to the new table.
  1919. note 1) XT, AT,XT/2, XT/286, PS/2 except ESDI disks
  1920.      2) format of parameter table is:
  1921.         word    cylinders
  1922.         byte    heads
  1923.         word    starting reduced write current cylinder (XT only, 0 for others)
  1924.         word    starting write pre-comp cylinder
  1925.         byte    maximum ECC burst length
  1926.         byte    control byte
  1927.            bits 0-2     drive option (XT only, 0 for others)
  1928.                 3       set if more than 8 heads
  1929.                 4       always 0
  1930.                 5       set if manufacturer's defect map on max cylinder+1
  1931.                 6       disable ECC retries
  1932.                 7       disable access retries
  1933.         byte    standard timeout (XT only, 0 for others)
  1934.         byte    formatting timeout (XT only, 0 for others)
  1935.         byte    timeout for checking drive (XT only, 0 for others)
  1936.         word    landing zone    (AT, PS/2)
  1937.         byte    sectors/track   (AT, PS/2)
  1938.         byte    0  (zeroes)
  1939.      3) normally vectored to ROM table when system is initialized.
  1940.  
  1941.  
  1942. ┌─────────────────────────────────────────────────────────────────────────────┐
  1943. │Interrupt 42h   Pointer to screen BIOS entry .......................... 5**33│
  1944. └─────────────────────────────────────────────────────────────────────────────┘
  1945.                 Used by EGA, VGA, PS/2.
  1946.                 Relocated (by EGA, etc.) video handler (original int 10h).
  1947.                 Revectors int 10 (BIOS video) calls to EGA BIOS.
  1948.                 Also used by Zenith Z-100.
  1949.                 MCT (Modular Circuit Technology, Taiwan) 4-drive floppy
  1950.                   controller revectors int 13h to here.
  1951.  
  1952.  
  1953. ┌─────────────────────────────────────────────────────────────────────────────┐
  1954. │Interrupt 43h   Pointer to EGA Graphics Character Table ............... 5**34│
  1955. └─────────────────────────────────────────────────────────────────────────────┘
  1956.                 The POST initializes this vector pointing to the default table
  1957.                 located in the EGA ROM BIOS. (PC-2 and up). Not initialized if
  1958.                 EGA not present.
  1959.                  This vector was referred to (mistakenly) as the Video
  1960.                 Parameters table in the original EGA BIOS listings.
  1961.  
  1962.  
  1963. ┌─────────────────────────────────────────────────────────────────────────────┐
  1964. │Interrupt 44h   Pointer to graphics character table ................... 5**35│
  1965. └─────────────────────────────────────────────────────────────────────────────┘
  1966. (0:0110h)       This table contains the dot patterns for the first 128
  1967.                 characters in video modes 4,5, and 6, and all 256 characters
  1968.                 in all additional graphics modes. Not initialized if EGA not
  1969.                 present.
  1970. note 1) EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh.
  1971.      2) Novell NetWare - High-Level Language API.
  1972.      3) Also used by Zenith Z-100.
  1973.  
  1974.  
  1975. ┌─────────────────────────────────────────────────────────────────────────────┐
  1976. │Interrupt 45h   Reserved by IBM  (not initialized) .................... 5**36│
  1977. └─────────────────────────────────────────────────────────────────────────────┘
  1978. note    Also used by Zenith Z-100, purpose unknown.
  1979.  
  1980.  
  1981. ┌─────────────────────────────────────────────────────────────────────────────┐
  1982. │Interrupt 46h   Pointer to second hard disk parameter block ........... 5**37│
  1983. └─────────────────────────────────────────────────────────────────────────────┘
  1984.                 AT, XT/286, PS/2
  1985.                 (see int 41h) (except ESDI hard disks) (not initialized unless
  1986.                 specific user software calls for it)
  1987.                 also used by Zenith Z-100
  1988.  
  1989.  
  1990. ┌─────────────────────────────────────────────────────────────────────────────┐
  1991. │Interrupt 47h   Reserved by IBM  (not initialized) .................... 5**38│
  1992. └─────────────────────────────────────────────────────────────────────────────┘
  1993.  
  1994.  
  1995. ┌─────────────────────────────────────────────────────────────────────────────┐
  1996. │Interrupt 48h   Cordless Keyboard Translation ......................... 5**39│
  1997. └─────────────────────────────────────────────────────────────────────────────┘
  1998. (0:0120h)       This vector points to code to translate the cordless keyboard
  1999.                 scancodes into normal 83-key values. The translated scancodes
  2000.                 are then passed to int 9. (not initialized on PC or AT)
  2001.                 This is valid on the IBM PCjr only. IBM built a number of
  2002.                 prototype XT/2 machines with infrared keyboards which were
  2003.                 later sold through salvage outlets, but this was never a
  2004.                 production option.
  2005.  
  2006.  
  2007. ┌─────────────────────────────────────────────────────────────────────────────┐
  2008. │Interrupt 49h   Non-keyboard Scan Code Translation Table Address (PCjr) 5**40│
  2009. └─────────────────────────────────────────────────────────────────────────────┘
  2010. (0:0124h)       PCjr translate table, TI Pro video
  2011.  
  2012.  
  2013. ┌─────────────────────────────────────────────────────────────────────────────┐
  2014. │Interrupt 4Ah   Real-Time Clock Alarm (Convertible, PS/2, EISA) ....... 5**41│
  2015. └─────────────────────────────────────────────────────────────────────────────┘
  2016.                 (not initialized on PC or AT)
  2017.                 Invoked by PS/2 and Convertible BIOS when real-time clock
  2018.                   alarm occurs.
  2019.                 Used by TI Professional PC for keyboard DSR interface
  2020.                   (keyboard BIOS interrupt)
  2021.                   Functions for AH=0, 1, 2 and 5 are identical to IBM's int 16h.
  2022. note    When the RTC alarm function is activated it will generate an interrupt
  2023.         4Ah at the time specified by the previous int 1Ah/06h alarm call.
  2024.         The calling program must point the 4Ah vector to an alarm processing
  2025.         routine before setting the alarm with int 1Ah/06h.  It must also
  2026.         cancel the alarm and resture the 1Ah vector to its original value
  2027.         before returning to DOS.
  2028.  
  2029.  
  2030. ┌─────────────────────────────────────────────────────────────────────────────┐
  2031. │Interrupt 4Bh   Reserved by IBM  (not initialized) .................... 5**42│
  2032. └─────────────────────────────────────────────────────────────────────────────┘
  2033.         Used by IBM Micro Channel SCSI hard disk controllers.
  2034.  
  2035.  
  2036. ┌─────────────────────────────────────────────────────────────────────────────┐
  2037. │Interrupt 4Ch   Reserved by IBM  (not initialized) .................... 5**43│
  2038. └─────────────────────────────────────────────────────────────────────────────┘
  2039.  
  2040.  
  2041. ┌─────────────────────────────────────────────────────────────────────────────┐
  2042. │Interrupt 4Dh   Reserved by IBM  (not initialized) .................... 5**44│
  2043. └─────────────────────────────────────────────────────────────────────────────┘
  2044.  
  2045.  
  2046. ┌─────────────────────────────────────────────────────────────────────────────┐
  2047. │Interrupt 4Eh   Reserved by IBM  (not initialized) .................... 5**45│
  2048. └─────────────────────────────────────────────────────────────────────────────┘
  2049. note    Used instead of int 13h for disk I/O on TI Professional PC.
  2050.  
  2051.  
  2052. ┌─────────────────────────────────────────────────────────────────────────────┐
  2053. │Interrupt 4Fh   Reserved by IBM  (not initialized) .................... 5**46│
  2054. └─────────────────────────────────────────────────────────────────────────────┘
  2055.  
  2056.  
  2057. ┌─────────────────────────────────────────────────────────────────────────────┐
  2058. │Interrupt 50-57 IRQ0-IRQ7 Relocation .................................. 5**47│
  2059. └─────────────────────────────────────────────────────────────────────────────┘
  2060. note 1) Normally not initialized.
  2061.      2) IRQ0-IRQ7 relocated by DesQview.
  2062.      3) IRQ0-IRQ7 relocated by IBM 3278 Emulation Control Program.
  2063.  
  2064.  
  2065. ┌─────────────────────────────────────────────────────────────────────────────┐
  2066. │Interrupt 58h   Reserved by IBM  (not initialized) .................... 5**48│
  2067. └─────────────────────────────────────────────────────────────────────────────┘
  2068.  
  2069.  
  2070. ┌─────────────────────────────────────────────────────────────────────────────┐
  2071. │Interrupt 59h   Reserved by IBM  (not initialized) .................... 5**49│
  2072. └─────────────────────────────────────────────────────────────────────────────┘
  2073.         GSS Computer Graphics Interface (GSS*CGI)
  2074. entry   DS:DX   pointer to block of 5 array pointers
  2075. return  CF      clear
  2076.                 AX      return code
  2077.         CF      set
  2078.                 AX      error code
  2079. note 1) Int 59h is the means by which GSS*CGI language bindings communicate
  2080.         with GSS*CGI device drivers and the GSS*CGI device driver controller.
  2081.      2) Also used by the IBM Graphic Development Toolkit.
  2082.  
  2083.  
  2084. ┌─────────────────────────────────────────────────────────────────────────────┐
  2085. │Interrupt 5Ah   Reserved by IBM  (not initialized)  ................... 5**50│
  2086. └─────────────────────────────────────────────────────────────────────────────┘
  2087. note    IBM Cluster Adapter BIOS entry address.
  2088.  
  2089.  
  2090. ┌─────────────────────────────────────────────────────────────────────────────┐
  2091. │Interrupt 5Bh   Reserved by IBM  (not initialized) .................... 5**51│
  2092. └─────────────────────────────────────────────────────────────────────────────┘
  2093. note    Used by IBM Cluster Adapter.
  2094.  
  2095.  
  2096. ┌─────────────────────────────────────────────────────────────────────────────┐
  2097. │Interrupt 5Ah   Cluster Adapter BIOS entry address .................... 5**52│
  2098. └─────────────────────────────────────────────────────────────────────────────┘
  2099. note    Normally not initialized.
  2100.  
  2101.  
  2102. ┌─────────────────────────────────────────────────────────────────────────────┐
  2103. │Interrupt 5Bh   Reserved by IBM  (not initialized) .................... 5**53│
  2104. └─────────────────────────────────────────────────────────────────────────────┘
  2105. note    Used by cluster adapter?
  2106.  
  2107.  
  2108. ┌─────────────────────────────────────────────────────────────────────────────┐
  2109. │Interrupt 5Ch   NETBIOS interface entry port, TOPS .................... 5**54│
  2110. └─────────────────────────────────────────────────────────────────────────────┘
  2111. note 1) See Chapter 13 for information on network programming.
  2112.      2) The Texas Instruments Professional PC (TI Pro) uses 5Ch for the Pause
  2113.         key on the keyboard. The TI BIOS allows any user routine to execute
  2114.         from the Pause interrupt as long as it eventually returns.
  2115.      3) Used by Windows/386 by Virtual Machine routines.
  2116.      4) Used by Novell Netware 2.0.
  2117.  
  2118.  
  2119. ┌─────────────────────────────────────────────────────────────────────────────┐
  2120. │Interrupt 5Dh   Reserved by IBM  (not initialized) .................... 5**55│
  2121. └─────────────────────────────────────────────────────────────────────────────┘
  2122. note    The Texas Instruments Professional PC (TI Pro) uses 5Ch for the
  2123.         keyboard services.
  2124.  
  2125.  
  2126. ┌─────────────────────────────────────────────────────────────────────────────┐
  2127. │Interrupt 5Eh   Reserved by IBM  (not initialized) .................... 5**56│
  2128. └─────────────────────────────────────────────────────────────────────────────┘
  2129. note    TI Professional PC - Program Break.
  2130.  
  2131.  
  2132. ┌─────────────────────────────────────────────────────────────────────────────┐
  2133. │Interrupt 5Fh   Reserved by IBM  (not initialized) .................... 5**57│
  2134. └─────────────────────────────────────────────────────────────────────────────┘
  2135. note    TI Professional PC - Keyboard queueing.
  2136.  
  2137.  
  2138. ┌─────────────────────────────────────────────────────────────────────────────┐
  2139. │Interrupt 60h-67h  User Program Interrupts ............................ 5**58│
  2140. └─────────────────────────────────────────────────────────────────────────────┘
  2141. note 1) Available for general use.
  2142.      2) Some Adaptec hard disk controllers used these interrupts. Models and
  2143.         usages unknown.
  2144.      3) Various major programs make standardized use of this group of
  2145.         interrupts. Details of common use follows:
  2146.  
  2147.  
  2148. ┌─────────────────────────────────────────────────────────────────────────────┐
  2149. │Interrupt 60h   User Program Interrupt ................................ 5**59│
  2150. └─────────────────────────────────────────────────────────────────────────────┘
  2151. note 1) Used by 10-Net Network OS Interface.
  2152.      2) Used by FTP Driver - PC/TCP Packet Driver Specification.
  2153.      3) See Chapter 13 for network programming calls.
  2154.      4) Used by TOPS netork (TTALK.EXE).
  2155.      5) The 2-The-Max VGA-16 board TSR zoom utility uses this interrupt by
  2156.         default.  (see int 61h for details)
  2157.      6) Versa-Spool print spooler revectors int 17h to here when installing
  2158.         its own 17h handler. (see int 61h also)
  2159.      7) Some older OMTI and Adaptec hard disk controllers used the interrupts
  2160.         from 60h to 63h as 16 bytes of scratch RAM.
  2161.      8) Used by GDOSMEM Windows TSR skeleton.
  2162.         entry   AX      GTSR Identification #
  2163.                 BX      00h     GTSR Installation Check
  2164.         return  BX      GTSR Identification #
  2165.  
  2166.         entry   AX      GTSR Identification #
  2167.                 BX      01h     GTSR Increment WORD in CX:DX
  2168.                 CX      Segment => WORD
  2169.                 DX      Offset  => WORD
  2170.         return  none
  2171.      9) Used by TDOSMEM Windows TSR skeleton.
  2172.         entry   AX      TTSR Identification #
  2173.                 BX      00h     GTSR Installation Check
  2174.         return  BX      GTSR Identification #
  2175.                 CX      Segment => local WORD
  2176.                 DX      Offset  => local WORD
  2177.  
  2178.         entry   AX      TTSR Identification #
  2179.                 BX      01h     GTSR Increment WORD in CX:DX
  2180.         return  none
  2181.  
  2182.  
  2183. ┌─────────────────────────────────────────────────────────────────────────────┐
  2184. │Interrupt 61h  User Interrupt ......................................... 5**  │
  2185. └─────────────────────────────────────────────────────────────────────────────┘
  2186.      1) Default interrupt used by Chris Dunford's PCED 2.0 API.
  2187.      2) Used by Mike Geary's DENYNONE.ASM SHARE.EXE controller.
  2188.  
  2189.         Function  00h   Get Current Mode Value
  2190.         entry   AH      00h
  2191.         return  AL      current mode value
  2192.  
  2193.         Function  01h   Set New Open-Mode Value
  2194.         entry   AH      01h
  2195.                 AL      new value to set
  2196.         return  none
  2197.  
  2198.      3) The 2-The-Max VGA-16 board TSR zoom utility uses this interrupt by
  2199.         default.
  2200.  
  2201.         Function  00h   Zoom
  2202.         entry   AX      0000h
  2203.                 BX      zoom factor (0-7x)
  2204.         return  none
  2205.  
  2206.         Function  01h   Center Zoomed Window
  2207.         entry   AX      0001h
  2208.                 BX      x coordinate to center
  2209.                 CX      y coordinate to center
  2210.         return  none
  2211.         note    'x' and 'y' will be positioned as close to the center of the
  2212.                 display as possible.
  2213.  
  2214.         Function  02h   End Zoom
  2215.         entry   AX      0002h
  2216.         return  none
  2217.         note    Restores screen to original state.
  2218.  
  2219.         Function  03h   Report Zoom
  2220.         entry   AX      0003h
  2221.         return  AX      zoom factor (0-7)
  2222.  
  2223.         Function  04h   Enter Specify Mode
  2224.         entry   AX      0004h
  2225.         return  none
  2226.         note    This mode is entered whenever the predefined hotkey is pressed.
  2227.  
  2228.         Function  05h   Query Zoom Window
  2229.         entry   AX      0005h
  2230.                 BX      segment address of return argument array
  2231.                 CX      offset address of return argument array
  2232.         return  BX:CX   14 byte array
  2233.                         offset[0]  x start of zoom window
  2234.                               [1]  y start of zoom window
  2235.                               [2]  x end of zoom window
  2236.                               [3]  y end of zoom window
  2237.                               [4]  current zoom factor
  2238.                               [5]  zoom offset start x
  2239.                               [6]  zoom offset start y
  2240.  
  2241.         Function  06h   Set Zoom Window
  2242.         entry   AX      0006h
  2243.                 BX      segment address of window coordinate array
  2244.                 CX      offset address of window coordinate array
  2245.         return  BX:CX   array
  2246.                         offset[0]  x start of zoom window
  2247.                               [1]  y start of zoom window
  2248.                               [2]  x end of zoom window
  2249.                               [3]  y end of zoom window
  2250.      4) Versa-Spool print spooler revectors int 1Ch to here when installing
  2251.         its own 1Ch handler.
  2252.  
  2253.  
  2254. ┌─────────────────────────────────────────────────────────────────────────────┐
  2255. │Interrupt 63h  User Program Interrupt                                        │
  2256. └─────────────────────────────────────────────────────────────────────────────┘
  2257. This interrupt is used by Novell NetWare v2.0.
  2258.  
  2259.  
  2260. ┌─────────────────────────────────────────────────────────────────────────────┐
  2261. │Interrupt 64h  User Program Interrupt                                        │
  2262. └─────────────────────────────────────────────────────────────────────────────┘
  2263. This interrupt is used by Novell NetWare IPX versions 1.02-2.0 TBMI.
  2264.  
  2265.  
  2266. ┌─────────────────────────────────────────────────────────────────────────────┐
  2267. │Interrupt 65h  User Program Interrupt                                        │
  2268. └─────────────────────────────────────────────────────────────────────────────┘
  2269. This interrupt is used by Novell NetWare v2.0.
  2270.  
  2271.  
  2272. ┌─────────────────────────────────────────────────────────────────────────────┐
  2273. │Interrupt 67h   User Program Interrupt ................................ 5**60│
  2274. └─────────────────────────────────────────────────────────────────────────────┘
  2275. note 1) Used by Lotus-Intel-Microsoft Expanded Memory Specification 3.1 and
  2276.         higher. (EMS and LIM)
  2277.      2) Used by Ashton-Tate/Quadram/AST Enhanced Expanded Memory Specification
  2278.         3.1 and higher. (EEMS)
  2279.      3) Used by Phar Lap/Quarterdeck VCPI v1.0.
  2280.      4) See Chapter 10 for EMS/EEMS programming information.
  2281.      5) The Advance Digital PC Slave board (also marketed by Alloy) contains
  2282.         its own 8mHz 8086, up to 768K of on-card memory and a built-in
  2283.         monochrome monitor adapter, communicating with an RS232 terminal at
  2284.         19.2KBaud. Their operating system is an adaptation of MSDOS 2.11
  2285.         called RTNX or ATNX. ?TNX uses interrupt 67h for record locking,
  2286.         using an "interrupt 67h semaphore" system in which a data record
  2287.         access must be preceded by a call to int 67h with a string that
  2288.         contains a filename and a record number to lock.
  2289.      6) Some Adaptec hard disk controllers have problems related to their
  2290.         use of int 67h. Supposedly the Adaptec can be made to use a driver
  2291.         instead of ROM. The driver is generated by running the ROM program
  2292.         at C800:5 and this fixes the problem. Apparently this driver is
  2293.         called ADAPTEC.DRV. Check with Adaptec if you suspect a problem.
  2294.      7) IBM issued a known bug report listing a fault in DOS 4.0's network
  2295.         handling within IBMBIO.COM. The exact wording of the report is:
  2296.         UR22624  IR79404   WAIT       IBMBIO   INT 2FH for INT 67H causes hang
  2297.  
  2298.  
  2299. ┌─────────────────────────────────────────────────────────────────────────────┐
  2300. │Interrupt 68h   Not Used  (not initialized) ........................... 5**61│
  2301. └─────────────────────────────────────────────────────────────────────────────┘
  2302. note 1) APPC/PC Network Interface. See Chapter 13.
  2303.      2) Some Toshiba laptop hard disk controllers use this interrupt.
  2304.      3) Used by HDTest to communicate with BIOS entry point.
  2305.      4) Used by Mike Geary's EGA720.ASM (forces EGA into 720x348 mode)
  2306.  
  2307.  
  2308. ┌─────────────────────────────────────────────────────────────────────────────┐
  2309. │Interrupt 69h   Not Used  (not initialized) ........................... 5**62│
  2310. └─────────────────────────────────────────────────────────────────────────────┘
  2311.  
  2312.  
  2313. ┌─────────────────────────────────────────────────────────────────────────────┐
  2314. │Interrupt 6Ah   Not Used  (not initialized) ........................... 5**63│
  2315. └─────────────────────────────────────────────────────────────────────────────┘
  2316. note    Used by SLR System's OPTHELP.COM, a TSR help system for their OPTASM
  2317.         assembler. OPTHELP may be configured to interrupts from 60h to 7Fh.
  2318.  
  2319.  
  2320. ┌─────────────────────────────────────────────────────────────────────────────┐
  2321. │Interrupt 6Bh   Not Used  (not initialized) ........................... 5**64│
  2322. └─────────────────────────────────────────────────────────────────────────────┘
  2323.  
  2324.  
  2325. ┌─────────────────────────────────────────────────────────────────────────────┐
  2326. │Interrupt 6Ch   System Resume Vector (Convertible) .................... 5**65│
  2327. └─────────────────────────────────────────────────────────────────────────────┘
  2328. note 1) This vector is not initialized on the PC, XT, or jr.
  2329.      2) DOS 3.2 Realtime Clock update uses this interrupt.
  2330.  
  2331.  
  2332. ┌─────────────────────────────────────────────────────────────────────────────┐
  2333. │Interrupt 6Dh   Not Used  (not initialized) ........................... 5**66│
  2334. └─────────────────────────────────────────────────────────────────────────────┘
  2335. note    Used internally by VGA adapter -  IBM, Paradise, Video 7, NCR
  2336.  
  2337.  
  2338. ┌─────────────────────────────────────────────────────────────────────────────┐
  2339. │Interrupt 6Eh   Not Used  (not initialized) ........................... 5**67│
  2340. └─────────────────────────────────────────────────────────────────────────────┘
  2341.  
  2342.  
  2343.  
  2344. ┌─────────────────────────────────────────────────────────────────────────────┐
  2345. │Interrupt 6Fh   10-Net API............................................. 5**68│
  2346. └─────────────────────────────────────────────────────────────────────────────┘
  2347. note 1) See Chapter 13 for information on the 10-Net API.
  2348.      2) HP ES-12 Extended BIOS
  2349.         a) Read CMOS Memory
  2350.         entry   AH      22h
  2351.                 BL      address of CMOS byte to read
  2352.                 BP      0012h
  2353.         return  AH      status
  2354.                 AL      byte read
  2355.                 BP, DS  destroyed
  2356.         b) Write CMOS Memory
  2357.         entry   AH      24h
  2358.                 AL      new value
  2359.                 BL      address of CMOS byte to write
  2360.                 BP      0012h
  2361.         return  AH      status
  2362.                 BP, DS  destroyed
  2363.      3) Novell NetWare - PCOX API (3270 PC terminal interface).
  2364.  
  2365.  
  2366. ┌─────────────────────────────────────────────────────────────────────────────┐
  2367. │Interrupt 70h   IRQ 8, Real Time Clock Interrupt (AT, XT/286, PS/2) ... 5**69│
  2368. └─────────────────────────────────────────────────────────────────────────────┘
  2369.  
  2370.         This interrupt services the real-time clock hardware.  The hardware
  2371.         supports 2 modes of operation, an interrupt at a specific 24 hour
  2372.         interval (i.e 9:42 am), or repeatedly every 0.976 ms (1,024 kHz).
  2373.         Both modes can operate at the same time if needed.
  2374.  
  2375.         In the 24 hour alarm mode, the interrupt is vectored here by hardware
  2376.         and interrupt 4Ah is called to alert the application program of the
  2377.         alarm. Int 4Ah is not handled by the BIOS other than to return, and
  2378.         is normally revectored by a particular application using the alarm.
  2379.  
  2380.         When repeating interrupt mode is active, the 32-bit microsecond
  2381.         counter consisting of timer_clk_low and timer_clk_hi is decremented
  2382.         by 976 us on every interrupt.  When the timer reaches zero, the
  2383.         byte pointed to by the offset @timer_wait_off and and segment
  2384.         @timer_wait_seg is set to 80h (this pointer is set by an application
  2385.         program through int 1Ah function ah=6).
  2386.  
  2387.         The Motorola MC146818A real time clock chip, or its equivalent, can be
  2388.         programmed to generate the real time clock interrupt (int 70h)
  2389.         approximately 1024 times per second. The BIOS Real Time Clock ISR is
  2390.         invoked on each real time clock interrupt. Only AT BIOSs support the
  2391.         Real Time Clock ISR.
  2392.  
  2393.         The BIOS initializes the int 70h vector to address F000:5124h.
  2394.  
  2395.         Three AT BIOS functions interface with the int 70h Real Time Clock ISR.
  2396.         These are:
  2397.                 int 15h, AH 83h   Event Wait Interval
  2398.                 int 15h, AH 86h   Wait
  2399.                 int 1Ah, AH 06h   Set User Alarm
  2400.  
  2401.  
  2402. ┌─────────────────────────────────────────────────────────────────────────────┐
  2403. │Interrupt 71h   IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2) ......... 5**70│
  2404. └─────────────────────────────────────────────────────────────────────────────┘
  2405. note    LAN Adapter 1 (rerouted to int 0Ah [IRQ2] by BIOS).
  2406.  
  2407.  
  2408. ┌─────────────────────────────────────────────────────────────────────────────┐
  2409. │Interrupt 72h   IRQ 10  (AT, XT/286, PS/2)  Reserved .................. 5**71│
  2410. └─────────────────────────────────────────────────────────────────────────────┘
  2411. note    Hardware servicer (called by hardware 8259-2, IRQ 10).
  2412.  
  2413.  
  2414. ┌─────────────────────────────────────────────────────────────────────────────┐
  2415. │Interrupt 73h   IRQ 11  (AT, XT/286, PS/2)  Reserved .................. 5**72│
  2416. └─────────────────────────────────────────────────────────────────────────────┘
  2417. note    Hardware servicer (called by hardware 8259-2, IRQ 11).
  2418.  
  2419.  
  2420. ┌─────────────────────────────────────────────────────────────────────────────┐
  2421. │Interrupt 74h   IRQ 12  Mouse Interrupt (PS/2) ........................ 5**73│
  2422. └─────────────────────────────────────────────────────────────────────────────┘
  2423. note    Hardware servicer (called by hardware 8259-2, IRQ 12).
  2424.  
  2425.  
  2426. ┌─────────────────────────────────────────────────────────────────────────────┐
  2427. │Interrupt 75h   IRQ 13, Coprocessor Error (AT) ........................ 5**74│
  2428. └─────────────────────────────────────────────────────────────────────────────┘
  2429. note 1) BIOS redirects math coprocessor errors to int 2 (NMI).
  2430.      2) The math co-processor 80287 invokes this interrupt. Int 75h calls the
  2431.         non-maskable interrupt int 2 to halt the system. (80287 is not used if
  2432.         this vector is left pointing here). Programs which use the 80287 must
  2433.         re-vector this interrupt to use the 80287.
  2434.      3) Under DOS 3.2, this interrupt is routed through the DOS interrupt stack
  2435.         pool like device interrupts. However, coprocessor exceptions generally
  2436.         do not resume via IRET and this fill the interrupt pool (stacks
  2437.         allocated and never deallocated) on exceptions. Microsoft has a patch
  2438.         available for DOS 3.2.
  2439.      4) Weitek ABACUS x167 math coprocessor exception handler shares this
  2440.         interrupt with Intel 80x87 if present.
  2441.  
  2442.  
  2443. ┌─────────────────────────────────────────────────────────────────────────────┐
  2444. │Interrupt 76h   IRQ 14, Hard Disk Controller (AT, XT/286, PS/2) ....... 5**75│
  2445. └─────────────────────────────────────────────────────────────────────────────┘
  2446. note 1) Called by hardware 8259-2 IRQ 14.
  2447.      2) When the hard disk controller has completed its task, it signals
  2448.         completion though hardware activation of int 76h. The status in
  2449.         hdsk_int_flags is set to "done", a value of 0FFh. Int 15/fn91h may also
  2450.         be called to signal the interrupt is done.
  2451.  
  2452.  
  2453. ┌─────────────────────────────────────────────────────────────────────────────┐
  2454. │Interrupt 77h   IRQ 15 (AT, XT/286, PS/2)  Reserved ................... 5**76│
  2455. └─────────────────────────────────────────────────────────────────────────────┘
  2456. note    Future services (called by hardware 8259-2 IRQ 15).
  2457.  
  2458.  
  2459. ┌─────────────────────────────────────────────────────────────────────────────┐
  2460. │Interrupt 78h   Not Used .............................................. 5**77│
  2461. └─────────────────────────────────────────────────────────────────────────────┘
  2462. note 1) Used by Novell Netware 2.0 - non-dedicated shell.
  2463.      2) DESQview uses ints 78h-7Fh for itself to revector the 8259 interrupt
  2464.         controllers.
  2465.  
  2466.  
  2467. ┌─────────────────────────────────────────────────────────────────────────────┐
  2468. │Interrupt 79h   Not Used .............................................. 5**78│
  2469. └─────────────────────────────────────────────────────────────────────────────┘
  2470.  
  2471. note 1) Used by LAN:Datacore runtimes for BASIC and C by Lanquest Group in
  2472.         releases after late '86.
  2473.      2) Used by AutoCAD 2.5/2.6 ADI Digitizer interface (default).
  2474.  
  2475.  
  2476. ┌─────────────────────────────────────────────────────────────────────────────┐
  2477. │Interrupt 7Ah   Reserved .............................................. 5**79│
  2478. └─────────────────────────────────────────────────────────────────────────────┘
  2479. note 1) Novell NetWare - Low-Level API APX, versions 2.0a+.  See Chapter 13.
  2480.      2) AutoCAD Device Interface, used by various video boards.
  2481.      3) IBM 3270 Emulator program.
  2482.      4) Also used by early versions of "File Access Utility" by Automated
  2483.         Insurance Resource Systems. AIRS changed to a different interrupt in
  2484.         late '86 to eliminate conflict with Novell.
  2485.      5) Used by LAN:Datacore runtimes for BASIC and C by Lanquest Group in
  2486.         versions 2.5 and higher before late '86. Lanquest changed to int 79h
  2487.         to prevent Novell conflict.
  2488.  
  2489.  
  2490. ┌─────────────────────────────────────────────────────────────────────────────┐
  2491. │Interrupt 7Bh-7Eh  Not Used by IBM .................................... 5**80│
  2492. └─────────────────────────────────────────────────────────────────────────────┘
  2493.         Btrieve API
  2494. entry   register unknown
  2495.         functions:
  2496.         00h     open
  2497.         01h     close
  2498.         02h     insert
  2499.         03h     update
  2500.         04h     delete
  2501.         05h     get_equal
  2502.         06h     get_next
  2503.         07h     get_prev
  2504.         08h     get_greater
  2505.         09h     get_gr_eql
  2506.         0Ah     get_less
  2507.         0Bh     get_less_eq
  2508.         0Ch     get_first
  2509.         0Dh     get_last
  2510.         0Eh     create
  2511.         0Fh     stat
  2512.         10h     extend
  2513.         11h     set_dir: set directory information
  2514.         12h     get_dir: get directory information
  2515.         13h     begin_trans
  2516.         14h     end_trans
  2517.         15h     abort_trans
  2518.         16h     get_pos: get record position number
  2519.         17h     get_direct: get data by sending record position
  2520.         18h     step_direct
  2521.         19h     stop
  2522.         1Ah     version
  2523.         1Bh     unlock
  2524.         1Ch     reset
  2525. return  unknown
  2526. note    Btrieve sets low byte of vector to 33h; this serves as the installation
  2527.         check.
  2528.  
  2529.  
  2530. ┌─────────────────────────────────────────────────────────────────────────────┐
  2531. │Interrupt 7Fh   IBM 8514/A Graphics Adapter API ....................... 5**82│
  2532. └─────────────────────────────────────────────────────────────────────────────┘
  2533. note 1) 59 8514/A API functions available (HDILOAD.EXE) parameters unknown.
  2534.      2) Used by second copy of COMMAND set with SHELL=.
  2535.      3) Not used by COMMAND /C at DOS prompt.
  2536.      4) The IBM RTIC (Real Time Interface Coprocessor) Multiport (and
  2537.         Multiport/2) use int 7Fh as a method of communication between the
  2538.         system-unit resident interrupt handler and the RTIC card's operating
  2539.         system. There is a convention for using it in which register AX
  2540.         contains the signature of the handler that should handle the interrupt.
  2541.         Some signatures are:
  2542.                 AX    0200h    is a call to the current task dispatcher
  2543.                                (from the BTRIEVE application interface).
  2544.                 AX    0101h    is a call from an application to the RTIC
  2545.                                function request mechanism.
  2546.                 AX    0FEEDh   is a call from the ICAINTH.SYS interrupt handler.
  2547.      5) MultiLink Advanced (a custom version of PC-MOS/386), versions 3.03 and
  2548.         higher, from The Software Link, Inc.
  2549.         Function  02h   Invoke user interface (multitasking DOS shell)
  2550.         entry   AH      02h
  2551.                 AL      00h
  2552.         return  unknown
  2553.         Function  0Dh   Set new spooler parameters
  2554.         entry   AH      0Dh
  2555.                 AL      ASCII code for disposition (D,S,H,N)
  2556.                 BH      ASCII code for priority    (0-9)
  2557.                 BL      ASCII code for class       (A-Z)
  2558.         return  AL      Error
  2559.                         00h     OK
  2560.                         01h     no spooler installed
  2561.                         02h     invalid request
  2562.         Function  0Eh   Get spooler parameters
  2563.         entry   AH      0Eh
  2564.         return  AL      01h     if no spooler installed, otherwise:
  2565.                 AL      ASCII code for disposition (D,S,H,N)
  2566.                 BH      ASCII code for priority    (0-9)
  2567.                 BL      ASCII code for class       (A-Z)
  2568.      6) There have been mentions of assorted other little-known programs using
  2569.         this interrupt. In view of its use by DOS and the increasingly-popular
  2570.         8514/A adapter, it would probably be wise to avoid int 7Fh for
  2571.         aftermarket application software.
  2572.      7) Also used by IBM HLLAPI.
  2573.      8) Used internally by later versions of Tom Mack's RBBS-PC BBS system.
  2574.      9) Used by Novell Netware 2.0+ to switch non-dedicated shell to console
  2575.         mode.
  2576.  
  2577.  
  2578. ┌─────────────────────────────────────────────────────────────────────────────┐
  2579. │Interrupt 80h-85h  Reserved by BASIC .................................. 5**83│
  2580. └─────────────────────────────────────────────────────────────────────────────┘
  2581. note    Interrupts 80h through 0ECh are apparently unused and not initialized
  2582.         in most clone systems. Not known if GWBASIC or MBASIC use any of these
  2583.         interrupts.
  2584.  
  2585.  
  2586. ┌─────────────────────────────────────────────────────────────────────────────┐
  2587. │Interrupt 80h   Novell Netware 2.0 .................................... 5**  │
  2588. └─────────────────────────────────────────────────────────────────────────────┘
  2589.  
  2590.  
  2591. ┌─────────────────────────────────────────────────────────────────────────────┐
  2592. │Interrupt 81h   Novell Netware 2.0 .................................... 5**  │
  2593. └─────────────────────────────────────────────────────────────────────────────┘
  2594.  
  2595.  
  2596. ┌─────────────────────────────────────────────────────────────────────────────┐
  2597. │Interrupt 82h   Reserved by BASIC ..................................... 5**  │
  2598. └─────────────────────────────────────────────────────────────────────────────┘
  2599. note 1) Used in some early versions of NEC Multispeed laptop for ROM
  2600.         application management.
  2601.      2) Used by Pecan Software's Pascal compiler (P-system).
  2602.  
  2603.  
  2604. ┌─────────────────────────────────────────────────────────────────────────────┐
  2605. │Interrupt 81h   Used by Proteon Network ............................... 5**  │
  2606. └─────────────────────────────────────────────────────────────────────────────┘
  2607.  
  2608.  
  2609. ┌─────────────────────────────────────────────────────────────────────────────┐
  2610. │Interrupt 86h   Int 18 when relocated by NETBIOS ...................... 5**84│
  2611. └─────────────────────────────────────────────────────────────────────────────┘
  2612.  
  2613.  
  2614. ┌─────────────────────────────────────────────────────────────────────────────┐
  2615. │Interrupt 86h-0F0h  Used by BASIC when BASIC interpreter is running ... 5**85│
  2616. └─────────────────────────────────────────────────────────────────────────────┘
  2617.  
  2618.  
  2619. ┌─────────────────────────────────────────────────────────────────────────────┐
  2620. │Interrupt 0A0h-0D0h  TI Professional - free interrupt pool ............ 5**  │
  2621. └─────────────────────────────────────────────────────────────────────────────┘
  2622.  
  2623.  
  2624. ┌─────────────────────────────────────────────────────────────────────────────┐
  2625. │Interrupt 0A4h  Right Hand Man API .................................... 5**86│
  2626. └─────────────────────────────────────────────────────────────────────────────┘
  2627. entry   AH      RHM function  (unknown)
  2628. return  unknown
  2629. note    Right-Hand Man is a shareware TSR desktop utility similar to SideKick.
  2630.  
  2631.  
  2632. ┌─────────────────────────────────────────────────────────────────────────────┐
  2633. │Interrupt  0D4h PC-MOS/386 API ........................................ 5**87│
  2634. └─────────────────────────────────────────────────────────────────────────────┘
  2635. note    This interrupt is used for access to the PC-MOS/386 4.x operating
  2636.         system's user API. Previous versions of the OS used interrupt 38h.
  2637.         See Chapter 13 for API programming information.
  2638.  
  2639.  
  2640. ┌─────────────────────────────────────────────────────────────────────────────┐
  2641. │Interrupt  0E0h Digital Research CP/M-86 function calls ............... 5**88│
  2642. └─────────────────────────────────────────────────────────────────────────────┘
  2643. note 1) Lotus 123 Release 2 reportedly alters the int 0E0h vector during
  2644.         operation and leaves it pointing somewhere in the TPA on exit.
  2645.         Perhaps used by the mysterious Lotus add-on program hook?
  2646.      2) Used by Digital Research CP/M-86, Concurrent CP/M and Concurrent DOS
  2647.         API entry points. Values are typicall passed in the DX register and
  2648.         returned in the AX register.
  2649.      3) Used by Larry Himes PD TBACK background timeslicer for DOS. (very old)
  2650.      4) Used by American Data Technology SmartFAX products.
  2651. entry   AH      20h     Send FAX
  2652.         AL      02h     for FAX format file
  2653.                 03h     for ASCII format file
  2654.         CH      number of redials (0-9). Defaults to 9 if input out of range.
  2655.         CL      backoff time (1-99). 1 unit is 15 sec, value is set to 99
  2656.                 if out of range
  2657.         DS:DX   input filename (ASCII). 20 bytes max.
  2658.         DX:BX   dial number. Speed dial number is allowed
  2659. return  AL      (if bit 7 set)  number of files transmitted
  2660.                 (bit 7 not set) 0FFh    file not found
  2661.                                 0FEh    no dial tone
  2662.                                 0FDh    line busy or non-FAX tone
  2663.                                 0FCh    other error
  2664. entry   AH      21h     reserved
  2665.  
  2666. entry   AH      22h     Auto/Manual Transmission Toggle
  2667.         AL      00h     switch to Auto mode (default)
  2668.                 01h     switch to Manual mode
  2669. return  none
  2670.  
  2671. entry   AH      23h     Set Manual Receive Mode
  2672.         AL      00h     switch to Auto mode (default)
  2673.                 01h     switch to Manual mode. SmartFAX will not answer phone
  2674. return  none
  2675.  
  2676. entry   AH      24h     Send FAX Handshake to Remote
  2677. note    No other parameters are necessary. No returns.
  2678.  
  2679. entry   AH      25h     Enable/Disable Background Task for Spooling
  2680.         AL      00h     enabled background operation. Program will put the
  2681.                         received data in the 80188 to spool.
  2682.                 01h     disables background operation. Does not spool data.
  2683.                         Data can be recovered by fns 26h and 27h.
  2684. return  none
  2685.  
  2686. entry   AH      26h     Check 80188 Buffer
  2687.         AX      data length
  2688.         BL      00h     some data of the same page appears in the next buffer
  2689.                 01h     end of page, more to follow
  2690.                 02h     end of page, last page
  2691.  
  2692. entry   AH      27h     Get Data from 80188 Buffer
  2693.         DS:DX   pointer to buffer to be saved, minimum size 12Kb.
  2694. return  AX      data length
  2695.         BL      00h     some data of the same page appears in the next buffer
  2696.                 01h     end of page, more to follow
  2697.                 02h     end of page, last page
  2698.  
  2699. entry   AH      28h     Reset After Receive
  2700. note    Resets SmartFAX for next call. No other parameters.
  2701.  
  2702. entry   AH      29h     Enable/Disable Communication Function
  2703.         AL      00h     enable communication
  2704.                 01h     disable communication
  2705. note    In disable mode, SmartFAX will not send or receive.
  2706.  
  2707.  
  2708. ┌─────────────────────────────────────────────────────────────────────────────┐
  2709. │Interrupt  0E1h PC Cluster Program .................................... 5**89│
  2710. └─────────────────────────────────────────────────────────────────────────────┘
  2711. note    This is a pointer to the disk server data table.
  2712.  
  2713.  
  2714. ┌─────────────────────────────────────────────────────────────────────────────┐
  2715. │Interrupt  0E2h PC Cluster Program .................................... 5**90│
  2716. └─────────────────────────────────────────────────────────────────────────────┘
  2717. note    Interrupt 1Ch is revectored to here.
  2718.  
  2719.  
  2720. ┌─────────────────────────────────────────────────────────────────────────────┐
  2721. │Interrupt 0E4h  Logitech Modula-2 v2.0   Monitor Entry ................ 5**91│
  2722. └─────────────────────────────────────────────────────────────────────────────┘
  2723. entry   AX      05h     monitor entry
  2724.                 06h     monitor exit
  2725.         BX      priority
  2726. return  unknown
  2727.  
  2728.  
  2729. ┌─────────────────────────────────────────────────────────────────────────────┐
  2730. │Interrupt 0E5h  Not Used .............................................. 5**92│
  2731. └─────────────────────────────────────────────────────────────────────────────┘
  2732.  
  2733.  
  2734. ┌─────────────────────────────────────────────────────────────────────────────┐
  2735. │Interrupt 0E6h  Not Used .............................................. 5**93│
  2736. └─────────────────────────────────────────────────────────────────────────────┘
  2737. note    Used by PKzip file compressor.
  2738.  
  2739.  
  2740. ┌─────────────────────────────────────────────────────────────────────────────┐
  2741. │Interrupt 0E7h  Not Used .............................................. 5**94│
  2742. └─────────────────────────────────────────────────────────────────────────────┘
  2743.  
  2744.  
  2745. ┌─────────────────────────────────────────────────────────────────────────────┐
  2746. │Interrupt 0E8h  Not Used .............................................. 5**95│
  2747. └─────────────────────────────────────────────────────────────────────────────┘
  2748.  
  2749.  
  2750. ┌─────────────────────────────────────────────────────────────────────────────┐
  2751. │Interrupt 0E9h  Not Used .............................................. 5**96│
  2752. └─────────────────────────────────────────────────────────────────────────────┘
  2753.  
  2754.  
  2755. ┌─────────────────────────────────────────────────────────────────────────────┐
  2756. │Interrupt 0EAh  Not Used .............................................. 5**97│
  2757. └─────────────────────────────────────────────────────────────────────────────┘
  2758.  
  2759.  
  2760. ┌─────────────────────────────────────────────────────────────────────────────┐
  2761. │Interrupt 0EBh  Not Used .............................................. 5**98│
  2762. └─────────────────────────────────────────────────────────────────────────────┘
  2763.  
  2764.  
  2765. ┌─────────────────────────────────────────────────────────────────────────────┐
  2766. │Interrupt 0ECh  Not Used .............................................. 5**99│
  2767. └─────────────────────────────────────────────────────────────────────────────┘
  2768.  
  2769.  
  2770. ┌─────────────────────────────────────────────────────────────────────────────┐
  2771. │Interrupt 0EDh  Not Used ............................................. 5**100│
  2772. └─────────────────────────────────────────────────────────────────────────────┘
  2773.  
  2774.  
  2775. ┌─────────────────────────────────────────────────────────────────────────────┐
  2776. │Interrupt 0EEh  Not Used ............................................. 5**101│
  2777. └─────────────────────────────────────────────────────────────────────────────┘
  2778.  
  2779.  
  2780. ┌─────────────────────────────────────────────────────────────────────────────┐
  2781. │Interrupt 0EFh  GEM interface (Digital Research) ..................... 5**102│
  2782. └─────────────────────────────────────────────────────────────────────────────┘
  2783. entry   CX      0473h
  2784.         DS:DX   pointer to GEM parameter block
  2785. note    no other parameters are known
  2786.  
  2787.  
  2788. ┌─────────────────────────────────────────────────────────────────────────────┐
  2789. │Interrupt 0F0h  unknown .............................................. 5**103│
  2790. └─────────────────────────────────────────────────────────────────────────────┘
  2791. note    1) Used by secondary copy of COMMAND when SHELL= set.
  2792.         2) Not used by COMMAND /C at DOS prompt.
  2793.         3) Used by BASIC while in interpreter.
  2794.  
  2795.  
  2796. ┌─────────────────────────────────────────────────────────────────────────────┐
  2797. │Interrupts 0F1h-0FFh  (absolute addresses 3C4h-3FFh) ................. 5**104│
  2798. └─────────────────────────────────────────────────────────────────────────────┘
  2799. note    Location of Interprocess Communications Area.
  2800.  
  2801.  
  2802. ┌─────────────────────────────────────────────────────────────────────────────┐
  2803. │Interrupt 0F4h  Not Used ............ ................................ 5**105│
  2804. └─────────────────────────────────────────────────────────────────────────────┘
  2805.  
  2806.  
  2807. ┌─────────────────────────────────────────────────────────────────────────────┐
  2808. │Interrupt 0F5h  Not Used ............ ................................ 5**106│
  2809. └─────────────────────────────────────────────────────────────────────────────┘
  2810.  
  2811.  
  2812. ┌─────────────────────────────────────────────────────────────────────────────┐
  2813. │Interrupt 0F8h  Set Shell Interrupt (OEM) ............................ 5**107│
  2814. └─────────────────────────────────────────────────────────────────────────────┘
  2815.                 Set OEM handler for int 21h calls from 0F9h through 0FFh
  2816. entry   AH      0F8h
  2817.         DS:DX   pointer to handler for Functions 0F9h thru 0FFh
  2818. note 1) To reset these calls, pass DS and DX with 0FFFFh. DOS is set up to
  2819.         allow ONE handler for all 7 of these calls. Any call to these handlers
  2820.         will result in the carry bit being set and AX will contain 1 if they are
  2821.         not initialized. The handling routine is passed all registers just as
  2822.         the user set them. The OEM handler routine should be exited through an
  2823.         IRET.
  2824.      2) 10 ms interval timer (Tandy?)
  2825.  
  2826.  
  2827. ┌─────────────────────────────────────────────────────────────────────────────┐
  2828. │Interrupt 0F9h  Reserved ............................................. 5**108│
  2829. └─────────────────────────────────────────────────────────────────────────────┘
  2830. note    First of 8 SHELL service codes, reserved for OEM shell (WINDOW); use
  2831.         like HP Vectra user interface?
  2832.  
  2833.  
  2834. ┌─────────────────────────────────────────────────────────────────────────────┐
  2835. │Interrupt 0FAh  USART ready (RS-232C) ................................ 5**109│
  2836. └─────────────────────────────────────────────────────────────────────────────┘
  2837.  
  2838.  
  2839. ┌─────────────────────────────────────────────────────────────────────────────┐
  2840. │Interrupt 0FBh  USART RS ready (keyboard) ............................ 5**110│
  2841. └─────────────────────────────────────────────────────────────────────────────┘
  2842.  
  2843.  
  2844. ┌─────────────────────────────────────────────────────────────────────────────┐
  2845. │Interrupt 0FCh  Unknown ...............................................5**111│
  2846. └─────────────────────────────────────────────────────────────────────────────┘
  2847.  
  2848.  
  2849. ┌─────────────────────────────────────────────────────────────────────────────┐
  2850. │Interrupt 0FDh  reserved for user interrupt .......................... 5**112│
  2851. └─────────────────────────────────────────────────────────────────────────────┘
  2852.  
  2853.  
  2854. ┌─────────────────────────────────────────────────────────────────────────────┐
  2855. │Interrupt 0FEh  reserved by IBM ...................................... 5**113│
  2856. └─────────────────────────────────────────────────────────────────────────────┘
  2857. note    AT/XT286/PS50+ - vector destroyed by return from protected mode.
  2858.  
  2859.  
  2860. ┌─────────────────────────────────────────────────────────────────────────────┐
  2861. │Interrupt 0FFh  reserved by IBM ...................................... 5**114│
  2862. └─────────────────────────────────────────────────────────────────────────────┘
  2863. note 1) AT/XT286/PS50+ - vector destroyed by return from protected mode.
  2864.      2) Zenith Z-100 (S-100 bus MSDOS) warm boot.
  2865.  
  2866.  
  2867.